是否可以在TextMate的正则表达式中使用NOT?


22

我有一个Matlab项目,正在OSX编辑器TextMate中进行。我需要找到某个单词的所有实例,比方说它是“ foo”,而不是前面都没有“”。或后接“ /”。

但是,我找不到任何方法来搜索像这样被否定定义的正则表达式。有谁知道是否可以搜索诸如“ A前面有B以外的任何东西”之类的东西?

(TextMate使用K. Kosako 的Oniguruma正则表达式库。)

Answers:


31

您想使用以下语法:

(?=subexp)         look-ahead
(?!subexp)         negative look-ahead
(?<=subexp)        look-behind
(?<!subexp)        negative look-behind

就你而言 (?<!\.)foo(?!/)


1
太棒了!我忽略了文档中的那些内容。谢谢:)
Nagel 2012年

这是一个出色的解决方案,还考虑了单词foo在文本开头或结尾处的出现。
simhumileco

13

方括号内的^(抑扬符或插入符号)使表达式无效。因此要找到一个不带“。”的“ foo”。将会:

[^.]foo

也应该(^|[^.])(foo)匹配一个额外的字符。
ctrl-alt-delor 2012年

谢谢,布莱恩!这是我最初尝试的变体,但是我弄乱了语法并尝试了^ [\。]而不是[^ \。]:P
Nagel 2012年

1
这行不通。您需要除“。”以外的所有字符。意思是“任何字符”。您需要对其进行转义:(^ | [^ \。])(foo)
Andras Gyomrey 2014年

[stuf]匹配字母s,t,u,f。方括号的内容不是表达式,而是列表。[^。]只是句点。[^ \。]是不是反斜杠或点的任何内容。^和-是有时在[]中有时具有特殊含义的唯一字符
Sherwood Botsford,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.