簡體   English   中英

正則表達式匹配 2 個或更多單詞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM