【问题标题】:co. corp. inc. regular expression公司公司公司正则表达式
【发布时间】:2009-06-08 21:00:40
【问题描述】:

这是我第一次使用正则表达式,我一直在尝试让正则表达式与以下内容匹配:

  • 苹果
  • 苹果公司
  • 苹果公司
  • 苹果公司

但不匹配:

  • 公司。苹果
  • 合作。苹果
  • 苹果公司公司。
  • 苹果公司公司。
  • 苹果公司公司
  • 等等……

这是我目前得到的 (apple)\s(inc|corp|co).$

认为你可以帮忙:)

编辑:它需要在 Java 中工作。 java是否有自己的正则表达式语法?

【问题讨论】:

    标签: java regex


    【解决方案1】:

    你快到了:

    ^apple(?:\s(?:inc|co|corp)\.)?$
    

    请注意,如果您希望您的正则表达式不区分大小写,则必须在构造模式时传递CASE_INSENSITIVE 标志或将(?i) 添加到模式中。

    【讨论】:

    • 另一种愚蠢的不区分大小写的方法是说 [Aa][pP][pP][lL][eE] 等。
    • 同意 - 这是可能的,而且很愚蠢。 :-) 不过,如果您处于无法通过不区分大小写选项的上下文中,这是一个不错的技巧。
    【解决方案2】:

    试试这样的:

    ^apple\s?(inc|corp|co)?\.?$
    

    请注意句点 (.),因为它们是通配符(在它们前面加上反斜杠)。

    ?表示不需要

    ^ 表示行首

    $ 表示行尾

    看这里以获得更完整的解释:http://www.anaesthetist.com/mnm/perl/Findex.htm

    【讨论】:

      【解决方案3】:

      试试这个:

      (?<!(?:inc|co|corp)\.\s)apple(?:\s(?:inc|co|corp)\.)?
      

      它使用否定的后向查看 (?&lt;! ) 来防止前缀,加上非捕获组 (?: ) 以丢弃不必要的反向引用。

      . 已转义为 \.,因为它是一个正则表达式符号,意思是“任何字符”。

      您使用的 $ 表示行尾 - 因此,除非您只希望它在字符串末尾匹配,否则您不需要它。
      但是,如果您正在专门搜索“apple inc”的整个字符串。 (等)然后您可以保留 $ 并用^ 替换否定的lookbehind 以将表达式简化为:

      ^apple(?:\s(?:inc|co|corp)\.)?$
      

      【讨论】: