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?\
This one should work: ~([\w']+(\s+|[^\w\s])){2,}~g
, which also match string like "I do!"
Test it here
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 )
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