我有以下字符串
string string#string#string string
string$string (string) string string string
string string#gulaen#string string-stringan
(string) string#string#string$string string string (string)
string string string$string#string$string#string string
string string#string$string#string string
string#string$string#string string
使用这种模式/\b(\w+[\#\$])\w+\b/
,我尝试匹配后跟空格,包含#和$的字符串,但是我无法获得想要的结果。我得到以下结果
我希望与以下突出显示的蓝色相匹配:
如何实现?谢谢
答案 0 :(得分:3)
您可以创建一个与特殊符号和1个以上的字符字符匹配的组,并用+
对其进行量化:
/\b\w+(?:[#$]\w+)+\b/
请参见regex demo
模式匹配:
\b
-单词边界\w+
-1个以上的字符字符(?:[#$]\w+)+
-一个非捕获组,它匹配1个或多个连续出现的#
或$
字符,后跟1个以上的字符字符\b
-单词边界。请参见PHP demo:
echo preg_replace('/\b\w+(?:[#$]\w+)+\b/u', '<span>$0</span>', $str);
所讨论的$str
的输出:
string <span>string#string#string</span> string
<span>string$string</span> (string) string string string
string <span>string#gulaen#string</span> string-stringan
(string) <span>string#string#string$string</span> string string (string)
string string <span>string$string#string$string#string</span> string
string <span>string#string$string#string</span> string
<span>string#string$string#string</span> string
if (preg_match_all('/\b\w+(?:[#$]\w+)+\b/u', $str, $m)) {
print_r($m[0]);
}
输出:
Array
(
[0] => string#string#string
[1] => string$string
[2] => string#gulaen#string
[3] => string#string#string$string
[4] => string$string#string$string#string
[5] => string#string$string#string
[6] => string#string$string#string
)