【问题标题】:XML regex in Java and JavascriptJava 和 Javascript 中的 XML 正则表达式
【发布时间】:2012-12-06 09:49:35
【问题描述】:

我有一种情况,有人向我提供了很多 XML 风格的正则表达式,我需要使用这些正则表达式在 Java 和 Javascript 中进行一些验证。处理那些 XML 风格的正则表达式的最佳原因是什么,因为 XML 风格的正则表达式和 Java 风格或 ECMA(Javascript) 风格之间存在差异?

例子

正则表达式:

[A-z]

Java

"A" // true
"Ab" // false
"a" // true

Javascript

"A" // true
"Ab" // true
"a" // true

【问题讨论】:

  • 给我们看一个例子。我不明白这个问题:(
  • 你会重写你的问题吗?给我们看一些例子?
  • regular-expressions.info/refflavors.html 在这里您可以阅读有关正则表达式风格的信息。所以我想知道在不同语言中处理相同的正则表达式的最佳做法是什么?
  • 您知道[A-z] 也匹配[^_ 等吗?
  • 此外,Java 会在 Ab 上报告 False,因为您似乎使用的是 matches() 方法,而不是 matcher.find()

标签: java javascript xml regex


【解决方案1】:

您已经链接到 XML 和 ECMAScript 样式正则表达式之间的比较表,因此您可以轻松找出差异。

有一些相关的区别:

  • \d\w 仅匹配 JavaScript(和 Java)中的 ASCII 数字/字母数字。
  • JavaScript 不像 XML 和 Java 那样支持 Unicode 字符属性(\p{L} 等)。
  • Java 和 JavaScript 都不支持 XML 字符转义(如 \i\c)或字符类减法([a-z-[aeiou]])。

因此,如果您的 XML 正则表达式使用这些功能中的任何一个,您将无法轻松转换它们。

您可以通过使用 Steve Levithan 的 XRegExp package with Unicode plug-ins 修复 Unicode 问题来解决至少部分问题。在 Java 7 中,您可以将 switch on Unicode matching 用于 \d\w,这样应该可以解决您的大部分潜在问题。

但是,可能存在不那么明显的细微实现差异,因此您肯定需要进行一些测试。

【讨论】:

  • 感谢您的回答。问题是 XML 正则表达式来自第三方。所以我不知道在它们出现之前我必须处理什么样的正则表达式。我现在正在编写的软件应该能够处理这些正则表达式。
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多