【问题标题】:regex to match a substring, but not starting with certain characters正则表达式匹配子字符串,但不以某些字符开头
【发布时间】:2015-12-11 16:02:09
【问题描述】:

我正在搜索一个子字符串,例如test ,在更长的字符串中,例如alongstringtest.

在这个例子中,它会匹配 ok

但我想排除某些情况(当 'test' 前面有某些字符时)

例如

不匹配'a-test'(因为'-')

不匹配'abcgtest'(因为'g')

不匹配 'abc"test' (因为 '"' )

我已经很久没有写任何正则表达式了,所以这让我有点毛骨悚然!

【问题讨论】:

  • 不知道为什么我因为提出问题而被扣分,我做错了什么吗?

标签: php regex perl


【解决方案1】:

使用negative lookbehind:

(?<![-g"])test

【讨论】:

    【解决方案2】:

    最简单的答案是

    /(?<![g"-])test/
    

    但如果您需要更高的性能,还有优化的空间。如果test 不能出现在字符串的开头,那么就简单性和性能而言,以下是明显的赢家:

    /[^g"-]test/
    

    否则,我会尝试以下方法:

    /test(?<![g"-].{4})/s
    
    /^test|[^g"-]test/
    
    /^test/ || /[^g"-]test/
    

    注意:- 在字符类中可以有特殊含义,但如果它是第一个字符、否定 ^ 之后的第一个字符或最后一个字符,则不能。我总是最后使用它;它使事情变得简单而美好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      相关资源
      最近更新 更多