有没有办法在javascript正则表达式中实现相当于负面的lookbehind?我需要匹配一个不以特定字符集开头的字符串.
如果在字符串的开头找到匹配的部分,我似乎无法找到正确执行此操作的正则表达式.负面的看起来似乎是唯一的答案,但javascript没有.
编辑:这是我想要工作的正则表达式,但它没有:
(?<!([abcdefg]))m
所以它会匹配'jim'或'm'中的'm',但不会匹配'jam'
我试图通过嵌套子目录中的一堆文件来查找正则表达式匹配; 我的正则表达式需要消极的观察.
Perl有负面的外观,但据我所知,GNU grep不支持负面的lookbehinds.
获得相当于支持负面外观的GNU grep的最简单方法是什么?
(我想我可以在Perl中编写我自己的mini-grep,但这似乎不应该是必要的.我的Perl Cookbook副本包含tcgrep的源代码;是我应该使用的吗?如果是,那么最新的地方版本?别告诉我,我必须输入整个程序!)
我需要有关使用否定前瞻的帮助.我正在使用Notepad ++,我想删除除包含的行之外的所有行<title>(.*)</title>
我尝试了几件事但是没有用.
^.*(?!<title>).*</title>
^.*(?!<title>.*</title>)
Run Code Online (Sandbox Code Playgroud) 我有数以百计的字符串的出现的源文件flecha.jpg和flecha1.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)
有没有办法在VBA正则表达式中做出消极和积极的观察?
如果字符串以"A"开头,我想不匹配,所以我当前在模式的开头做^ A,然后删除match(0)的第一个字符.显然不是最好的方法!
我正在使用regExp对象.
该模式(?<!(asp|php|jsp))\?.*适用于PCRE,但它在Python中不起作用.
那么我该怎么做才能让这个正则表达式在Python中运行?(Python 2.7)
所以我有以下数据,比如称为"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失效).谢谢!
我有用户输入,方括号内允许一些标签.我已经编写了正则表达式模式来查找和验证括号内的内容.
在用户输入字段中,开启括号可以([)使用反斜杠进行转义,也可以使用另一个反斜杠(\)转义反斜杠.我需要后视子模式以避免在开括号之前奇数个连续的反斜杠.
目前我必须处理这样的事情:
(?<!\\)(?:\\\\)*\[(?<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
制作一个参数解析器.我想将一个字符串拆分成一个数组,", "除了前面的分隔符"|".这意味着字符串
"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: /(?<!\|), /
我需要一个正则表达式,它只会选择那些不以 .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