2017-06-01 18 views
0

如何使正則表達式選擇嚴格正則表達式:區分 '名' 和 'name_local'

'name':如果搜索 '名',

'name_local':如果搜索 'name_local',

但如果搜索「名稱」,不要選擇這兩個選項?

試過 '/('.$key.')(?!_)/',但它仍然同時選擇'name''name_local'如果$keyname

+0

正則表達式行使用結束。因爲name和name_會在你的正則表達式中匹配,你會得到兩個結果 – Gahan

+1

必須有其他的東西是錯誤的,因爲負面預覽,它**不匹配'name_local' - [在regex101看到這個](https://regex101.com/r/BNR9X9/1)。 – ClasG

回答

3

您需要的字邊界錨\b

'/(\b'.$key.'\b)/' 
0

字邊界不保證匹配的右一塊輸入字符串。例如,如果第二天字符不是單詞字符如name-local。使用lookarounds:

(?<!\S)name(?!\S) 

PHP:

$re = "/(?<!\S)$key(?!\S)/";