【问题标题】:find string that is missing substring in xml files regular expression在 xml 文件正则表达式中查找缺少子字符串的字符串
【发布时间】:2019-02-27 18:56:59
【问题描述】:

这是我找到它的 reg 表达式

(<instance_material symbol="material_)([0-9]+)(part)(.*?)(")(/)(>)

我需要找到一个不包含单词“part”的字符串 和 xml 行是

<instance_material symbol="material_677part01_h502_w5" target="#material_677part01_h502_w5"/>
     <instance_material symbol="material_677" target="#material_677"/>  

【问题讨论】:

标签: regex xml string search


【解决方案1】:

您可以使用负前瞻

^(?!.*part).*?$
  • ^ - 字符串开头。
  • (?!.*part) - 避免 part 的条件。
  • .*? - 匹配除新行以外的任何内容。
  • $ - 字符串结束

Demo

【讨论】:

  • 如果我只想查看以 开头的行怎么办
  • ^(?!.*part)&lt;instance_material symbol.*?$这就够了
【解决方案2】:

许多正则表达式初学者会遇到查找不包含某些单词的字符串的问题。您可以在Regular-Expression.info 上找到更多有用的提示。

^((?!part).)*$

【讨论】:

    【解决方案3】:

    您需要注意,所有使用正则表达式处理 XML 的尝试都是错误的,因为 (a) 将有一些合法的方式来编写正则表达式不匹配的 XML 文档,并且 (b)会有一些获得错误匹配的方法,例如通过将讨厌的东西放入 XML cmets 中。有时 99% 的时间是正确的当然是可以的,但不要在生产中这样做,因为很快我们就会有人在 SO“我需要生成具有特定顺序的属性的 XML,因为这就是接收应用程序的内容需要。”

    例如,您的正则表达式要求属性使用双引号而不是单引号,并且它不允许“=”符号周围的空格,或 XML 允许空格的其他几个地方。如果存在人们故意尝试破坏您的正则表达式的风险,您需要考虑一些技巧,例如人们写 &amp;#112; 代替 p

    即使这是一次性的,没有恶意颠覆的风险,您最好使用 XPath 执行此操作。然后它变成一个简单的查询,如//instance_materal[@symbol[not(contains(., 'part'))]]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      相关资源
      最近更新 更多