Regex Match Commas Outside Quotes - XML Schema Variant

时间:2018-01-17 20:34:58

标签: regex xml xsd

乍一看,这看起来像一个常见问题:我想在逗号上匹配,但不包括一对“双引号”之间的逗号。但是,这使得具有挑战性的是我需要使用正则表达式(W3C Specification)的XML Schema风格来实现这一点。

我能找到的所有解决方案都涉及前瞻,这不是这种正则表达式的特征。我得到的最接近的是:

(?:"[^"]*")|(,)

这样可以避免匹配引号内的逗号,而是将引号及其中的任何文本作为单独的组进行匹配。我碰到的一个建议是这样的:

(?:"[^"]*")(*SKIP)(*FAIL)|(,)

这样可以完美地工作,但是这个正则表达式的变体中不能再使用(* SKIP)和(* FAIL)。

Here is a sample.

Foo,Bar,"TEST, QUOTES",,Blah

此测试字符串应该有4个匹配项 - 每个逗号,不包括引号之间的中间一个。它应仅匹配逗号,而不是它们之间的文本。

我很茫然,互联网。我可以使用有限的工具来实现这一点吗?如果我不能让这个正则表达式工作,那么我唯一的另一种选择会更加混乱,而且可能会更慢。

1 个答案:

答案 0 :(得分:0)

由于XML正则表达式的能力有限,你无法解决这个问题,这是错误的工具。我建议使用XML解析器来根据需要操作内容。

XML正则表达式主要用于验证和Unicode属性......但不适用于像您这样的复杂任务。

  

XML Schema正则表达式支持following

     
      
  • 字符类,包括短字,范围和否定类。
  •   
  • 字符类减法。
  •   
  • 该点,匹配除换行符之外的任何字符。
  •   
  • 轮换和小组。贪心量词?*+{n,m}
  •   
  • Unicode属性和块
  •   

那就是它。