Regex to match 2 or more words

后端 未结 3 473
孤城傲影
孤城傲影 2021-01-21 17:30

I have a regex that tries to match for 2 or more words, but it isn\'t working as it\'s suppose to. What am I doing wrong?

$string = \"i dont know , do you know?\         


        
相关标签:
3条回答
  • 2021-01-21 17:33

    This one should work: ~([\w']+(\s+|[^\w\s])){2,}~g, which also match string like "I do!"

    Test it here

    0 讨论(0)
  • 2021-01-21 17:52

    I think you are missing how the {} are used, to match two words

    preg_match_all('/([a-z]+)/i', 'one two', $match );
    
    if( $match && count($match[1]) > 1 ){
             ....
    
    }
    

    Match is

    array (
      0 => 
      array (
        0 => 'one',
        1 => 'two',
      ),
      1 => 
      array (
        0 => 'one',
        1 => 'two',
      ),
    )
    

    Match will have all matches of the pattern, so then its trivial to just count them up...

    When using

            preg_match('/(\w+){2,}/', 'one two', $match );
    

    Match is

     array (
          0 => 'one',
          1 => 'e',
     )
    

    clearly not what you want.

    The only way I see with preg_match is with this /([a-z]+\s+[a-z]+)/

    preg_match ([a-z']+\b){2,} http://www.phpliveregex.com/p/frM

    preg_match ([a-z]+\s+[a-z]+) http://www.phpliveregex.com/p/frO

    Suggested

    preg_match_all ([a-z]+) http://www.phpliveregex.com/p/frR ( may have to select preg_match_all on the site )

    0 讨论(0)
  • 2021-01-21 17:59

    This will match for string that contains exactly 2 words or more:

    /([a-zA-Z]+\s?\b){2,}/g you can go http://www.regexr.com/ and test it

    PHP:

    $string = "i dont know , do you know?";
    preg_match("/([a-zA-Z]+\s?\b){2,}/", $string, $match);
    
    echo "<pre>";
    print_r($match);
    echo "</pre>";
    

    Note: do not use the /g in the PHP code

    0 讨论(0)
提交回复
热议问题