当前位置: 首页 > 面试题库 >

一个正则表达式,用于匹配没有其他子字符串的子字符串

崔宇
2023-03-14
问题内容

我需要一个匹配blahfooblah但不匹配的正则表达式blahfoobarblah

我希望它只匹配foo及其周围的所有内容,只要不跟在bar后面即可。

我尝试使用此方法:foo.*(?<!bar)这是相当接近的,但它匹配blahfoobarblah。负面的眼光需要匹配任何东西,而不仅仅是障碍。

我使用的特定语言是Clojure,它在后台使用Java正则表达式。

编辑:更具体地说,我也需要它通过blahfooblahfoobarblah但不是blahfoobarblahblah


问题答案:

尝试:

/(?!.*bar)(?=.*foo)^(\w+)$/

测试:

blahfooblah            # pass
blahfooblahbarfail     # fail
somethingfoo           # pass
shouldbarfooshouldfail # fail
barfoofail             # fail

正则表达式说明

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  (?!                      look ahead to see if there is not:
--------------------------------------------------------------------------------
    .*                       any character except \n (0 or more times
                             (matching the most amount possible))
--------------------------------------------------------------------------------
    bar                      'bar'
--------------------------------------------------------------------------------
  )                        end of look-ahead
--------------------------------------------------------------------------------
  (?=                      look ahead to see if there is:
--------------------------------------------------------------------------------
    .*                       any character except \n (0 or more times
                             (matching the most amount possible))
--------------------------------------------------------------------------------
    foo                      'foo'
--------------------------------------------------------------------------------
  )                        end of look-ahead
--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    \w+                      word characters (a-z, A-Z, 0-9, _) (1 or
                             more times (matching the most amount
                             possible))
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string

其他正则表达式

如果您只想排除紧接bar其后的时间foo,则可以使用

/(?!.*foobar)(?=.*foo)^(\w+)$/

编辑

您已对问题进行了更新以使其更具体。

/(?=.*foo(?!bar))^(\w+)$/

新测试

fooshouldbarpass               # pass
butnotfoobarfail               # fail
fooshouldpassevenwithfoobar    # pass
nofuuhere                      # fail

新的解释

(?=.*foo(?!bar))确保foo找到a ,但不直接遵循bar



 类似资料:
  • 我有一根这样的绳子 余额:“5048543747”,余额:“5119341413”,帐号:“0001000918”, 我使用了REGEX (.*?), 结果我收到的第一个子字符串是 余额:“5048543747” 实际上,我想要得到的结果是数组包括 { 余额:“5048543747” Baldefovd:“5119341413” 账号:“0001000918” } 有人能帮我吗。多谢。 编辑 我使

  • 问题内容: 我正在尝试为下面的示例文本构建一个正则表达式,在其中我需要替换 粗体 文本。到目前为止,我可以实现这一点, 那就是选择第一个和最后一个pip char之间的整个字符串。我一定要使用apache或java regex。 示例字符串:管道之间的文本长度可能会有所不同 问题答案: 要在出现管道后匹配零件,可以使用此正则表达式: 在这里n = 3 它将与匹配的#1组匹配 正则演示

  • 问题内容: 我在尝试将我的javascript regex经验转移到Python时遇到了麻烦。 我只是想让它工作: …但是它打印无。如果我做: 它匹配…默认情况下是否匹配字符串的开头?当匹配时,如何使用结果? 我如何进行第一场比赛?是否有比python网站提供的文档更好的文档? 问题答案: 隐式添加到您的正则表达式的开头。换句话说,它仅在字符串的开头匹配。 将在所有位置重试。 一般来说,建议您在需

  • 问题内容: 我在用Python将字符串中的数字匹配时遇到麻烦。尽管应该明确匹配,但甚至不匹配 或仅匹配。我的监督在哪里? 问题答案: 阅读文档:http : //docs.python.org/2/library/re.html#re.match 如果在零个或多个字符 开头 的 字符串 您要使用(或)

  • 我想解析以下字符串: 我正在使用,所以我这里缺少的是正确的正则表达式。规则是正则表达式必须: 隔离任何单个单词 任何用双引号括起来的子字符串都是匹配的 单词中的双引号必须忽略(稍后我将用空格替换它们)。 因此,结果匹配应该是: < li>w1 w"2 < li>w3 < li>| < li>w4 < li>w"5 < li>w6 w7 双引号是否包含在双引号括起来的子字符串中是无关紧要的(例如,1

  • 问题内容: 我有一个正则表达式字符串数组。其中之一必须与给定java文件中找到的任何字符串匹配。 这是我到目前为止拥有的正则表达式字符串: 但是,即使字符串内的引号被转义,该字符串也会被拒绝。我认为,无论字符串是否转义,当在字符串中找到引号时,我都会立即拒绝它。我需要它接受带转义引号的字符串文字,但它应该拒绝。 问题答案: 在Java中,您可以使用此正则表达式匹配和之间的所有转义引号: 使用的正则