![](/img/trans.png)
[英]regex to match entire words containing (one or more) mandatory and allowed characters
[英]Regex to match 2 or more words
我有一個試圖匹配 2 個或更多單詞的正則表達式,但它沒有像預期的那樣工作。 我做錯了什么?
$string = "i dont know , do you know?";
preg_match("~([a-z']+\b){2,}~", $string, $match);
echo "<pre>";
print_r($match);
echo "</pre>";
預期結果:
數組(我不知道)
實際結果:
數組 ( )
這將匹配包含 2 個或更多單詞的字符串:
/([a-zA-Z]+\\s?\\b){2,}/g
你可以去http://www.regexr.com/測試一下
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>";
注意:不要在 PHP 代碼中使用 /g
這個應該可以工作: ~([\\w']+(\\s+|[^\\w\\s])){2,}~g
,它也匹配像"I do!"
字符串
在這里測試
我認為您錯過了如何使用{}
來匹配兩個單詞
preg_match_all('/([a-z]+)/i', 'one two', $match );
if( $match && count($match[1]) > 1 ){
....
}
匹配是
array (
0 =>
array (
0 => 'one',
1 => 'two',
),
1 =>
array (
0 => 'one',
1 => 'two',
),
)
匹配將具有模式的所有匹配項,因此只需計算它們就很簡單了......
使用時
preg_match('/(\w+){2,}/', 'one two', $match );
匹配是
array (
0 => 'one',
1 => 'e',
)
顯然不是你想要的。
我在preg_match
看到的唯一方法是使用這個/([az]+\\s+[az]+)/
preg_match ([a-z']+\\b){2,}
http://www.phpliveregex.com/p/frM
preg_match ([az]+\\s+[az]+)
http://www.phpliveregex.com/p/frO
建議
preg_match_all ([az]+)
http://www.phpliveregex.com/p/frR (可能需要在網站上選擇 preg_match_all )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.