我有问题我想从字符串中提取这些数字,但只有当它们没有跟着“foo”时才会这样。
示例:
我有正则表达式:
(\d+):(\d+)
并且不知道如何阻止它在数字后面用“Foo”选择字符串。
答案 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中。
匹配
不匹配:
答案 2 :(得分:-2)
(\d+):(\d+) (\s*)(^[Ff]^[Oo]^[Oo])(\s*)