有没有办法返回此正则表达式的对立面?

时间:2018-12-06 23:44:55

标签: regex

有没有办法返回此正则表达式的反义词?

preg_match_all('/\p{Han}+/u', '道斯·麥克', $matches);

我希望$matches返回一个包含“·”字符而不是汉字的数组。

谢谢!

1 个答案:

答案 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}(非符号)等。