标签: negative-lookbehind

Javascript:负面的lookbehind相当于?

有没有办法在javascript正则表达式中实现相当于负面的lookbehind?我需要匹配一个不以特定字符集开头的字符串.

如果在字符串的开头找到匹配的部分,我似乎无法找到正确执行此操作的正则表达式.负面的看起来似乎是唯一的答案,但javascript没有.

编辑:这是我想要工作的正则表达式,但它没有:

(?<!([abcdefg]))m

所以它会匹配'jim'或'm'中的'm',但不会匹配'jam'

javascript regex negative-lookbehind

133
推荐指数
6
解决办法
7万
查看次数

获得相当于支持负面外观的GNU grep的最简单方法是什么?

我试图通过嵌套子目录中的一堆文件来查找正则表达式匹配; 我的正则表达式需要消极的观察.

Perl有负面的外观,但据我所知,GNU grep不支持负面的lookbehinds.

获得相当于支持负面外观的GNU grep的最简单方法是什么?

(我想我可以在Perl中编写我自己的mini-grep,但这似乎不应该是必要的.我的Perl Cookbook副本包含tcgrep的源代码;是我应该使用的吗?如果是,那么最新的地方版本?别告诉我,我必须输入整个程序!)

regex perl grep negative-lookbehind

18
推荐指数
1
解决办法
1546
查看次数

如何在正则表达式中使用否定前瞻删除不需要的行

我需要有关使用否定前瞻的帮助.我正在使用Notepad ++,我想删除除包含的行之外的所有行<title>(.*)</title>

我尝试了几件事但是没有用.

^.*(?!<title>).*</title>
^.*(?!<title>.*</title>)
Run Code Online (Sandbox Code Playgroud)

regex notepad++ negative-lookbehind negative-lookahead

16
推荐指数
1
解决办法
1万
查看次数

使用负面lookbehind的正则表达式在Notepad ++中不起作用

我有数以百计的字符串的出现的源文件flecha.jpgflecha1.jpg,但我需要找到其他的事件.jpg图像(即casa.jpg,moto.jpg,等等)

我试过使用带有负向lookbehind的正则表达式,如下所示:

(?<!flecha|flecha1).jpg
Run Code Online (Sandbox Code Playgroud)

但它不起作用!Notepad ++只是说它是一个无效的正则表达式.

我在其他地方尝试了正则表达式并且它有效,这是一个例子,所以我猜这是NPP处理正则表达式或者lookbehinds/lookaheads语法的问题.

那么我如何才能在NPP中获得相同的正则表达式结果呢?

如果有用,我使用Notepad ++版本6.3 Unicode

另外,如果你很善良,那么实现同样的东西的语法是什么,但可选的数字(在这种情况下只有'1')作为我的字符串的后缀?(即使它在NPP中不起作用,只是为了知道)......

我试过(?<!flecha[1]?).jpg但它不起作用.它应该与其他正则表达式相同,请参见此处(RegExr)

regex notepad++ negative-lookbehind regex-lookarounds

15
推荐指数
2
解决办法
9141
查看次数

关于VBA正则表达式的看法?

有没有办法在VBA正则表达式中做出消极和积极的观察?

如果字符串以"A"开头,我想不匹配,所以我当前在模式的开头做^ A,然后删除match(0)的第一个字符.显然不是最好的方法!

我正在使用regExp对象.

regex vba negative-lookbehind lookbehind

14
推荐指数
1
解决办法
8323
查看次数

Python正则表达式负面观察

该模式(?<!(asp|php|jsp))\?.*适用于PCRE,但它在Python中不起作用.

那么我该怎么做才能让这个正则表达式在Python中运行?(Python 2.7)

python regex pcre negative-lookbehind

13
推荐指数
1
解决办法
8543
查看次数

R中的正则表达式具有负后观

所以我有以下数据,比如称为"my_data":

Storm.Type
TYPHOON
SEVERE STORM
TROPICAL STORM
SNOWSTORM AND HIGH WINDS
Run Code Online (Sandbox Code Playgroud)

我想要的是分类my_data $ Storm.Type中的每个元素是否是风暴,但我不想将热带风暴包括为暴风雨(我要将它们分开分类),这样我就可以了

Storm.Type                    Is.Storm
TYPHOON                       0
SEVERE STORM                  1
TROPICAL STORM                0
SNOWSTORM AND HIGH WINDS      1
Run Code Online (Sandbox Code Playgroud)

我写了以下代码:

my_data$Is.Storm  <-  my_data[grep("(?<!TROPICAL) (?i)STORM"), "Storm.Type"]
Run Code Online (Sandbox Code Playgroud)

但这只会让"严重风暴"成为一场风暴(但不会让SNOWSTORM和HIGH WINDS失效).谢谢!

regex r negative-lookbehind

12
推荐指数
1
解决办法
4077
查看次数

RegEx:Look-behind避免奇数个连续反斜杠

我有用户输入,方括号内允许一些标签.我已经编写了正则表达式模式来查找和验证括号内的内容.

在用户输入字段中,开启括号可以([)使用反斜杠进行转义,也可以使用另一个反斜杠(\)转义反斜杠.我需要后视子模式以避免在开括号之前奇数个连续的反斜杠.

目前我必须处理这样的事情:

(?<!\\)(?:\\\\)*\[(?<inside brackets>.*?)]
Run Code Online (Sandbox Code Playgroud)

它工作正常,但问题是这个代码仍然匹配括号前面可能的连续反斜杠对(即使它们是隐藏的),并且后面只检查是否有另外一个反斜杠附加到对(或直接到开括号) .如果可能的话,我需要在后视组内避免它们.

例:

my [test] string is ok
my \[test] string is wrong
my \\[test] string is ok
my \\\[test] string is wrong
my \\\\[test] string is ok
my \\\\\[test] string is wrong
...
etc
Run Code Online (Sandbox Code Playgroud)

我使用PHP PCRE

php regex pcre negative-lookbehind lookbehind

10
推荐指数
1
解决办法
1921
查看次数

Ruby中的正则表达式负面看起来似乎不起作用

制作一个参数解析器.我想将一个字符串拆分成一个数组,", "除了前面的分隔符"|".这意味着字符串

"foo, ba|, r, arg"
Run Code Online (Sandbox Code Playgroud)

应该导致

`["foo", "ba|, r", "arg"]`
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用这个正则表达式:(?<!\|),它在http://regexhero.net/tester/中有效,但是当我尝试时

args.split(/(?<!\|), /)
Run Code Online (Sandbox Code Playgroud)

在ruby中,我收到一个错误: undefined (?...) sequence: /(?<!\|), /

ruby regex string negative-lookbehind lookbehind

6
推荐指数
1
解决办法
2504
查看次数

正则表达式负回顾和超前:等价和性能

我需要一个正则表达式,它只会选择那些不以 .png 或 .css 等特定扩展名结尾的 URL 字符串。

我测试了以下内容:

1)这个使用负回顾:

(?<!\.png|\.css)$
Run Code Online (Sandbox Code Playgroud)

https://regex101.com/r/tW4fO5/1

2)另一个使用负前瞻:

^(?!.*[.]png|.*[.]css$).*$
Run Code Online (Sandbox Code Playgroud)

https://regex101.com/r/qZ7vA4/1

两者似乎都工作正常,但据说 #1(负向后视)在 436 步(见链接)中处理,而 #2(负向后视)据说在 173 步中处理。

所以我的问题是:这是什么意思?会不会影响演出?

最后,这两个正则表达式在功能上真的是等价的吗?

编辑:解决方案摘要

总结一下,考虑到要通过正则表达式排除的字符串结尾的完整列表(一个典型的场景是 Web 服务器设置,其中静态资源由 apache 提供,而动态资源由不同的引擎提供 - 在我的情况下: php-fpm)。

PCRE 正则表达式有两种可能的选择:

1)负面回顾

$(?<!\.(?:ico|gif|jpg|png|css|rss|xml|htm|pdf|zip|txt|ttf)$|(?:js|gz)$|(?:html|woff)$)

https://regex101.com/r/eU9fI6/1

请注意,我使用了几个 OR ed 后视,因为负后视需要固定宽度的模式(即:您不能混合不同长度的模式)。这使得这个选项的编写稍微复杂一些。此外,在我看来,这降低了它的性能。

2)负前瞻

^(?!.*[.](?:js|ico|gif|jpg|png|css|rss|xml|htm|html|pdf|zip|gz|txt|ttf|woff)$).*$

https://regex101.com/r/dP7uD9/1

前瞻比后视略快。这是 100 万次迭代的测试结果:

后视时间 = 18.469825983047 秒
前瞻时间 = 14.316685199738 秒

如果我没有可变长度模式的问题,我会选择后视,因为它看起来更紧凑。反正哪一个都好。最后,我向前看:

<LocationMatch "^(?!.*[.](?:js|ico|gif|jpg|png|css|rss|xml|htm|html|pdf|zip|gz|txt|ttf|woff)$).*$">
    SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://www/srv/www/gioplet/web/public/index.php"
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)

regex negative-lookbehind negative-lookahead regex-lookarounds

6
推荐指数
1
解决办法
4486
查看次数