[英]Replace array values in string with regex?
說我有以下數組和字符串:
$array = array('$AA', '$AB', '$AC', '$ZZ');
$string = 'String mentioning $AA and $AB and $CZ and $MARTASS';
我想檢查$ string與$ array的匹配情況。 應檢查$ string中以“ $”開頭的每個單詞。 在示例中,找到了$ AA和$ AB的匹配項; 不適用於$ CZ。 所需的輸出將是:
String mentioning {MATCH} and {MATCH} and {NO-MATCH}
一個正則表達式是否可以實現?還是編寫幾行PHP更好? 任何輸入都可以收到:)
應該可以按以下順序進行兩次查找和替換:
第一:
\b(($AA)|($AB)|($AC)|($ZZ))\b ---> {MATCH}
第二:
\b$\w+\b ---> {NO-MATCH}
我不確定這是PHP語法,但到達那里應該並不難。 \\b
是一個單詞分隔符邊界,我相信PHP允許這樣做。
編輯:您可能需要轉義$
,但不確定是否已將其分組。
對的,這是可能的。 看一下preg_replace_callback()文檔中的示例。 您將使用以下形式的替換調用:
function substituteVar($matches) {
...
}
...
$newString = preg_replace_callback("/\\$(\w+)/", 'substituteVar', $string);
我想我將replaceVar substituteVar()
的內容保留為“讀者練習”。 :-)
這應該工作...
<?php
$string = 'String mentioning $AA and $AB and $CZ and $MARTASS';
echo preg_replace_callback("/\\$\S+/",
create_function('$a','return in_array($a[0],array("\$AA", "\$AB", "\$AC", "\$ZZ")) ? "{MATCH}" : "{NO-MATCH}";'),
$string
);
?>
正則表達式匹配$
然后是一個或多個非空格( \\S+
),然后檢查匹配的字符串是否在數組中(包含在create函數定義中,因此它在范圍內,並且正確地進行了轉義)
我不會在這里使用正則表達式,從頭到尾進行字符串的簡單掃描,查找'$'字符,然后對數組執行二進制搜索會更加簡單和快捷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.