乍一看,这看起来像一个常见问题:我想在逗号上匹配,但不包括一对“双引号”之间的逗号。但是,这使得具有挑战性的是我需要使用正则表达式(W3C Specification)的XML Schema风格来实现这一点。
我能找到的所有解决方案都涉及前瞻,这不是这种正则表达式的特征。我得到的最接近的是:
(?:"[^"]*")|(,)
这样可以避免匹配引号内的逗号,而是将引号及其中的任何文本作为单独的组进行匹配。我碰到的一个建议是这样的:
(?:"[^"]*")(*SKIP)(*FAIL)|(,)
这样可以完美地工作,但是这个正则表达式的变体中不能再使用(* SKIP)和(* FAIL)。
Foo,Bar,"TEST, QUOTES",,Blah
此测试字符串应该有4个匹配项 - 每个逗号,不包括引号之间的中间一个。它应仅匹配逗号,而不是它们之间的文本。
我很茫然,互联网。我可以使用有限的工具来实现这一点吗?如果我不能让这个正则表达式工作,那么我唯一的另一种选择会更加混乱,而且可能会更慢。
答案 0 :(得分:0)
由于XML正则表达式的能力有限,你无法解决这个问题,这是错误的工具。我建议使用XML解析器来根据需要操作内容。
XML正则表达式主要用于验证和Unicode属性......但不适用于像您这样的复杂任务。
XML Schema正则表达式支持following:
- 字符类,包括短字,范围和否定类。
- 字符类减法。
- 该点,匹配除换行符之外的任何字符。
- 轮换和小组。贪心量词
?
,*
,+
和{n,m}
- Unicode属性和块
那就是它。