如何为所有语言创建一个能匹配字母数字的正则表达式?

15
我今天遇到了这个问题:
这个正则表达式仅匹配英文:[a-zA-Z0-9]
如果我需要支持世界上任何语言,我应该写什么正则表达式呢?
4个回答

7
如果您使用字符类简写和支持Unicode的正则表达式引擎,就可以做到这一点。 \w 类匹配“单词字符”(字母、数字和下划线)。
但要注意一些不太适合此用途的正则表达式语法:JavaScript 对于 \d(数字)和 \w 使用ASCII码,但对于 \s(空白字符)使用Unicode。XML 则相反。

4
这取决于你使用的编程语言或正则表达式语法。[[:alpha:]] 可能更为标准。 - R.. GitHub STOP HELPING ICE
如果我不想要数字呢? - danfromisrael
3
\w 不支持国际字母,例如 Günther。 - DaveB

6

字母/字符: \p{L}

数字: \p{N}

因此,为了匹配所有语言的字母数字,可以使用:[\p{L}\p{N}]+

我正在寻找一种在JS中用空格替换所有语言的非字母数字字符的方法,最终使用了以下方式:

const regexForNonAlphaNum = new RegExp(/[^\p{L}\p{N}]+/ug);
someText.replace(regexForNonAlphaNum, " ");

由于这是JS,我们需要在正则表达式末尾添加“u”以使其支持Unicode,并且“g”代表全局匹配,因为我想匹配所有实例而不仅仅是单个实例。

参考资料:

https://www.linkedin.com/pulse/regex-one-pattern-rule-them-all-find-bring-darkness-bind-carranza/?trackingId=U6tRte%2BzTAG6O4AA3CrFmA%3D%3D

https://www.regular-expressions.info/unicode.html


1

支持大多数编程语言的正则表达式

^[A-zÀ-Ÿ\d-]*$


0
以下正则表达式是唯一对我有效的:
"\\p{LD}+" ==> LD means any letter or digit. 

如果您想从文本中清除任何非字母数字字符,可以使用以下方法:
text.replaceAll("\\P{LD}+", "");//Note P is capital. 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接