簡體   English   中英

如何使用PHP在字符串中搜索以特殊正則表達式字符開頭/結尾的單詞?

[英]How to use PHP to search a string for words starting/ending with special regular expression characters?

我正在使用PHP來查找以特殊正則表達式字符開頭的字符串是否作為文本字符串中的單詞出現。 這是PHP代碼:

$subject = " hello [hello [helloagain ";
$pattern = preg_quote("[hello");
if (preg_match("/\b" . $pattern  . "\b/", $subject, $dummy)) { 
    echo "match";
} else {
    echo "no match";
}

該模式以字符[開頭,因此,使用preg_quote()對其進行轉義。 as a word in the subject so there should be one match, but the above preg_match() returns no match. 主題中有一個作為單詞的實例,因此應該有一個匹配項,但是上述preg_match()不返回匹配項。 我認為原因是該主題中的特殊字符沒有被識別為單詞的開頭或結尾,但是我無法以這種方式思考任何想法? 謝謝。

如果我正確理解了這個問題,則可以只使用帶有前置空格的strpos()來分隔單詞:

$subject = " hello [hello [helloagain ";
$pattern = " [hello";

if(strpos($subject, $pattern) !== FALSE)
  // ...
else
  // ...

我認為這里使用reg-ex實際上是一個更好的方法,因為您正在尋找特殊的reg-ex字符,如果使用strpos() ,則不必轉義它們。

在所有情況下都需要進行一些修改才是正確的,但是當我嘗試該方法時,它是可行的。

您正確的認為空格和[符號之間的單詞邊界不匹配。

除了使用單詞邊界之外,您還可以在單​​詞之前和之后顯式搜索空格(以及其他分隔符,例如逗號和句點):

if (preg_match("/(\s|^)" . $pattern  . "(?=\s|$)/", $subject, $dummy)) { 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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