有没有办法返回此正则表达式的反义词?
preg_match_all('/\p{Han}+/u', '道斯·麥克', $matches);
我希望$matches
返回一个包含“·”字符而不是汉字的数组。
谢谢!
答案 0 :(得分:3)
使用反向类\P{Han}+
:
if (preg_match_all('/\P{Han}+/u', '道斯·麥克', $matches))
{
print_r($matches[0]); // => Array ( [0] => · )
}
请参见PHP demo
虽然\p{Han}
匹配所有中文字符,\P{Han}
匹配除这些字符之外的任何字符。
其他Unicode属性类也是如此:每个\p{X}
都有一个反向\P{X}
类。 \p{L}
与任何Unicode字母匹配,而\P{L}
与除Unicode字母之外的任何字符匹配。 cf. \p{N}
(数字)-\P{N}
(非数字),\p{S}
(符号)-\P{S}
(非符号)等。