正则表达式可以使用不同的语言吗?

时间:2010-03-03 13:50:57

标签: regex unicode internationalization

英语,当然,对于正则表达式来说是明智之举,因为它最初是为/开发的:

  

正则表达式能理解这个字符集吗?

法语进入了一些重音字符,我不确定如何匹配 - 即è和e都被正则表达式视为单词字符?

  

Lesexpressionsrégulièrespeuventcomprendre ce jeudecaractères?

日语不包含我所知道的正则表达式字符以匹配。

  

正规表现は,この文字を理解でき,设定?

8 个答案:

答案 0 :(得分:7)

简短回答:

更具体地说,它取决于你的正则表达式引擎支持unicode匹配(如here所述)。

这样的匹配会极大地使你的正则表达式复杂化,所以我可以推荐阅读this unicode正则表达式教程(同时注意unicode实现本身可能非常混乱,所以你也可以从阅读Joel Spolsky的{{3}关于字符集的内部工作原理)。

答案 1 :(得分:1)

据我所知,没有任何特定的模式可以使用,即[a-zA-Z]匹配“è”,但你总是可以单独匹配它们,即[a-zA-Zè正]

显然,这可以让你的regexp变得非常庞大,但是你总是可以通过将你的字符串添加到变量中来控制它,并且只将变量传递给表达式。

答案 2 :(得分:1)

一般来说,正则表达式更适用于移植机器可读文本而非人类可读文本。在许多方面,它是一个更普遍的答案,整个XML与正则表达式的东西;正则表达式本质上无法正确解析人类语言,因为语言比用于解析它的语言更复杂。

如果你想分解人类语言(包括英语),你会想要使用语言分析工具甚至AI,而不仅仅是正则表达式。

答案 3 :(得分:0)

它不是关于正则表达式,而是关于执行它的框架。 java和.net我认为非常善于处理unicode。因此“è和e都被正则表达式视为单词字符”是真的。

答案 4 :(得分:0)

这取决于实现和字符集。一般来说,答案是“是”,但可能需要您进行额外的设置。

例如,在Perl中,所选区域设置(使用区域设置)会改变\ w之类的含义。

答案 5 :(得分:0)

SO thread可能有所帮助。它包括您可以在正则表达式中使用的Unicode character classes(例如,[Ll]全是小写字母,无论语言如何)。

答案 6 :(得分:0)

例如,

/[\p{Latin}]/应包括拉丁字母。您可以获得完整的解释并参考here

答案 7 :(得分:0)

“ [\ p {L}]” 此正则表达式包含所有语言(大写和小写)中的所有字母字符。 因此可以接受诸如(a-z A-Zäßè正の文字を理解)之类的字母,但不接受(,。?> :)或其他类似符号之类的符号。

  • 方括号[]表示此表达式是一个集合。
  • 如果您希望接受该集合中无限制数量的字母,请在方括号后使用astrix *,例如:“ [\ p {L}] *”
  • 确保正则表达式中的空白始终很重要。因为您的评估可能会因为空白而失败。