如何用正则表达式过滤这个?

时间:2010-10-13 18:42:51

标签: regex filter

我有问题我想从字符串中提取这些数字,但只有当它们没有跟着“foo”时才会这样。

示例:

  • “12:13 Foo”(不)
  • “12:22 Bla”(是的)

我有正则表达式:

(\d+):(\d+)

并且不知道如何阻止它在数字后面用“Foo”选择字符串。

3 个答案:

答案 0 :(得分:4)

这在某种程度上取决于您的正则表达式风格,但如果它支持lookaround,您可以使用:

(\d+):(\d+)(?:\s+(?!Foo)|$)

但是,这不匹配12:34Bar(4和B之间没有空格)。

另一个编辑:如果你可以使用原子摸索,那么我认为这将涵盖最后一个数字与其后面的单词以及之前的情况(rubular link)之间没有空格的情况:

(\d+):(?>\d+)(?!\s*F[oO][oO]) 

#Or just (\d+):(?>\d+)(?!\s*Foo) if case-insensitive

答案 1 :(得分:2)

(更新回答)

(\d+):(\d+)(?:\s(?!\s*Foo)|$)

通过添加否定前瞻(?!Foo),它只匹配不以“Foo”结尾的字符串。它还会将两位数组捕获到反向引用1和2中。

匹配

  • 12点34
  • 12:22 Bla
  • 1:1

不匹配:

  • 12:13 Foo
  • 12:13Foo
  • 12:13 Foo

答案 2 :(得分:-2)

(\d+):(\d+) (\s*)(^[Ff]^[Oo]^[Oo])(\s*)