【问题标题】:Regex to check when a word pattern is missing from the string正则表达式检查字符串中何时缺少单词模式
【发布时间】:2013-05-13 13:48:54
【问题描述】:

我有一个类似这样的目标字符串 PT_content:data1 AND PT_content2:data2 OR PT_content3:data3

现在我需要检查字符串中是否有任何无效的限定符。, 例如

PT_content:data1 AND PR_content2:data2 OR PT_content3:data3(这是无效的,因为只允许PT_xxxxxx:data。)

我尝试了一些带有负前瞻的模式,但它似乎不起作用

Pattern.compile("(?!.*PT_[a-zA-Z]*:)")

谢谢

【问题讨论】:

    标签: java regex regex-negation negative-lookahead


    【解决方案1】:

    试试这个:

    ^(?:PT_[a-zA-Z]*:[^ ]+ (?:AND|OR|$))+$
    

    【讨论】:

      【解决方案2】:
      ^(PT_[a-z]*:data($| AND | OR ))+$
      

      给定模式匹配多个 PT_xxxxxx:data,后跟 ANDOR 或字符串结尾。在此模式中,xxxxxx 可以是从 '' 到无限字符的任何内容,只要它只包含 alpha 即可。

      这就是你要找的东西吗?我错过了什么吗?

      编辑

      只允许使用 alpha 作为分隔符。这也涵盖了ANDOR,因为它允许使用大写字母。

      ^(PT_[a-z]*:data($| [a-zA-Z]* ))+$
      

      【讨论】:

      • 它可以是 AND OR 或其他东西 xxxxx 实际上是 [a-z]*。
      • 您的意思是这些值不仅可以用`AND`或`OR`来分隔吗?您应该指定这些分隔符将匹配哪些要求。
      • 因为你不能只用通配符替换分隔符,因为这会绕过你的否定(例如PR_abc:data)。
      • 是的。它们可以被更多值分隔,
      • 如前所述,请指定这些值将匹配的内容,只有字母,还有数字,点或逗号等等。如前所述,通配符不能用于验证这些分隔符。
      【解决方案3】:

      为什么不直接创建“正”模式并尝试使用该模式匹配字符串?如果字符串 匹配,这就是你的情况。

      【讨论】:

      • 我对此了解不多。
      • 行不通。如果您正在匹配特定模式并且作为模式的一部分必须缺少一个单词,那么包含该单词作为存在然后执行与该模式相反的操作确实会匹配缺少的单词,但也将不再匹配其余的单词模式。
      【解决方案4】:

      不确定您是否真的需要前瞻或后瞻。

      如果你的问题是“PR_”而不是“PT_”,试试这个:

      String content = "PT_content:data1 AND PR_content2:data2 OR PT_content3:data3";
      Pattern badSyntax = Pattern.compile("P[^T]_.*?:.*?\\s");
      Matcher matcher = badSyntax.matcher(content);
      while (matcher.find()) System.out.println(matcher.group());
      

      输出:

      PR_content2:data2
      

      【讨论】:

      • 嗨梅娜。抱歉,它可以是任何东西,而不仅仅是 PT
      猜你喜欢
      • 2011-10-14
      • 2019-02-20
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 2021-09-15
      相关资源
      最近更新 更多