不匹配任何字母或任何标点符号的 Unicode 正则表达式

Unicode regex that do not match any letter nor any punctuation sign

我正在尝试创建一个 unicode 正则表达式来匹配除字母(任何语言)和标点符号之外的每个字符 .;:?!

例如字符串

abcd 123 kjd ¤%/(" .?:!

应该只匹配下面的粗体部分

abcd 123 kjd ¤%/(" .?:!

我知道 \P{L}+ 匹配除字母以外的所有内容,而 \P{P}+ 匹配除标点符号以外的所有内容。如何将这两个正则表达式字符串合并为一个?我试过简单地将 \P{L}+\P{P}+ 放在一起,但这并没有给出所需的匹配。我也试过写 [^.;:?!]\P{L}+ 但这也不起作用。

如何组合一个或多个 unicode 正则表达式,或者是否有更好的正则表达式来满足我的要求?

使用 \P{L}+\P{P}+ 将匹配 1+ 次任何字母的反义词后跟 1+ 次任何标点符号的反义词。

模式 [^.;:?!]\P{L}+ 与所列字符以外的任何字符匹配 1 次,后跟任何字母的反义字符 1+ 次。


你可以做的是将 \p{L}(将匹配任何类型的字母)添加到否定字符 class。根据 Wiktor Stribiżew 的建议,您可以添加 \p{Z} 以匹配任何类型的空格。

[^\p{Z}\p{L}.;:?!]

Regex demo