我在ruby中实现了以下问题.
这是我想要的模式:
1234,1324,1432,1423,2341等
即四位数字中的数字应该在[1-4]之间,也应该是非重复的.
为了让你以一种简单的方式理解我采取两位数模式,解决方案应该是:12,21
即数字应为1或2,并且应该是非重复的.
为了确保它们不重复,我想使用$ 1作为我的第二个数字的条件,但它不起作用.
请帮助我,并提前感谢.
我有以下场景:
1) car on the right shoulder
2) car on the left shoulder
3) car on the shoulder
Run Code Online (Sandbox Code Playgroud)
当左边没有时,我想匹配"肩膀".所以只有3)回归"肩膀"
re.compile(r'(?<!right|right\s*)shoulder')
sre_constants.error: look-behind requires fixed-width pattern
Run Code Online (Sandbox Code Playgroud)
好像我不能用\ s*和"|"
我该怎么解决这个问题.
提前致谢!
我需要验证表单上的输入.我期望输入是1到19位数之间的数字.输入也可以以零开头.但是,我想验证它们并非都是零.我有一个正则表达式,将确保输入是数字和1到19之间的数字.
^\d[1,19]$
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何包含一个检查,即整个字符串不是全零.我试过这个
^(![0]{1,19})(\d[1,19])$
Run Code Online (Sandbox Code Playgroud)
但它在0000000000000000001上失败,因为它允许可变数量的零.
如何检查整个字符串是不是零?
谢谢.
我试图在ASP.NET RegularExpressionValidator中这样做,所以我希望有一个表达式.我有其他选择,所以如果不能做到这一点我就不会运气.
我正在尝试构建一个像这样的正则表达式:
[match-word] ... [exclude-specific-word] ... [match-word]
Run Code Online (Sandbox Code Playgroud)
这似乎与负面预测有关,但是当我遇到这样的情况时,我遇到了问题:
[match-word] ... [exclude-specific-word] ... [match-word] ... [excluded word appears again]
Run Code Online (Sandbox Code Playgroud)
我希望上面的句子匹配,但是第一个和第二个匹配单词之间的负面预测"溢出",所以第二个单词永远不会匹配.
让我们看一个实际的例子.
我不想匹配每个带有"我"和"馅饼"这个词的句子,而不是那两个词之间的"讨厌"这个词.我有这三句话:
i sure like eating pie, but i love donuts <- Want to match this
i sure like eating pie, but i hate donuts <- Want to match this
i sure hate eating pie, but i like donuts <- Don't want to match this
Run Code Online (Sandbox Code Playgroud)
我有这个正则表达式:
^i(?!.*hate).*pie - have removed the word boundaries for clarity, original is: ^i\b(?!.*\bhate\b).*\bpie\b
Run Code Online (Sandbox Code Playgroud)
哪个匹配第一个句子,但不匹配第二个句子,因为负向前瞻扫描整个字符串.
有没有办法限制负面前瞻,如果在遇到"讨厌"之前遇到"馅饼",它是否满意?
注意:在我的实现中,此正则表达式之后可能还有其他术语(它是从语法搜索引擎动态构建的),例如:
^i(?!.*hate).*pie.*donuts …Run Code Online (Sandbox Code Playgroud) 我正在做一些正规表达体操.我为自己设置了尝试搜索C#代码的任务,其中使用了as-operator而没有在合理的空间内进行空检查.现在我不想解析C#代码.例如,我想捕获诸如的代码片段
var x1 = x as SimpleRes;
var y1 = y as SimpleRes;
if(x1.a == y1.a)
Run Code Online (Sandbox Code Playgroud)
但是,没有捕获
var x1 = x as SimpleRes;
var y1 = y as SimpleRes;
if(x1 == null)
Run Code Online (Sandbox Code Playgroud)
也不是那件事
var x1 = x as SimpleRes;
var y1 = y as SimpleRes;
if(somethingunrelated == null) {...}
if(x1.a == y1.a)
Run Code Online (Sandbox Code Playgroud)
因此,任何随机的空检查都将被视为"良好检查",因此未被发现.
问题是:我如何匹配某些东西,同时确保在其周围环境中找不到其他东西.
我尝试过天真的方法,寻找'as'然后在150个字符内做一个负面的预测.
\bas\b.{1,150}(?!\b==\s*null\b)
Run Code Online (Sandbox Code Playgroud)
上述正则表达式与所有上述示例相匹配.我的直觉告诉我,问题是前瞻然后做负面预测会发现许多情况,即前瞻没有找到'== null'.
如果我尝试否定整个表达式,那么这也无济于事,因为这将匹配大多数C#代码.
如果测试的字符串后跟任意数量的空格(零包括)然后没有跟随,我有(我相信的)负向前瞻断言 <@> *(?!QQQ),我期望匹配.<@>QQQ
但是,如果测试的字符串是<@> QQQ正则表达式匹配.
我不明白为什么会出现这种情况,并希望对此事有任何帮助.
这是一个测试脚本
use warnings;
use strict;
my @strings = ('something <@> QQQ',
'something <@> RRR',
'something <@>QQQ' ,
'something <@>RRR' );
print "$_\n" for map {$_ . " --> " . rep($_) } (@strings);
sub rep {
my $string = shift;
$string =~ s,<@> *(?!QQQ),at w/o ,;
$string =~ s,<@> *QQQ,at w/ QQQ,;
return $string;
}
Run Code Online (Sandbox Code Playgroud)
这打印
something <@> QQQ --> something at w/o QQQ
something <@> …Run Code Online (Sandbox Code Playgroud) 伙计们,我正在尝试使用正则表达式处理大量的数字字符串,并匹配特定模式的数字序列,其中某些数字在组中重复.部分要求是确保给定模式的各部分之间的唯一性.
我想要实现的那种匹配的一个例子
ABBBCCDD
Run Code Online (Sandbox Code Playgroud)
将其解释为一组数字.但A,B,C,D不能相同.每个重复都是我们想要匹配的模式.
我一直在使用带有负面预测的正则表达式作为这种匹配的一部分,它可以工作,但不是所有的时间,我很困惑为什么.我希望有人可以解释为什么会出现故障并提出解决方案.
因此,为了解决ABBBCCDD,我使用负面预测使用组来提出这个RE.
(.)(?!\1{1,7})(.)\2{2}(?!\2{1,4})(.)\3{1}(?!\3{1,2})(.)\4{1}
Run Code Online (Sandbox Code Playgroud)
打破这个..
(.) single character wildcard group 1 (A)
(?!\1{1,7}) negative look-ahead for 1-7 occurrences of group 1 (A)
(.) single character wildcard group 2 (B)
\2{2} A further two occurrences of group 2 (B)
(?!\2{1,4}) Negative look-ahead of 1-4 occurrences of group 2 (B)
(.) single character wildcard group 3 (C)
\3{1} One more occurrence of group 3 (C)
(?!\3{1,2}) Negative look-ahead of 1-2 occurrences of group 3 (C)
(.) single character wildcard …Run Code Online (Sandbox Code Playgroud) 我对基本的正则表达式很好,但是我在pos/neg的前方/后方有点迷失.
我正试图从中提取id#:
[keyword stuff=otherstuff id=123 morestuff=stuff]
之前或之后可能会有无限量的"东西".我一直在使用The Regex Coach来帮助调试我尝试过的东西,但我不再向前推进......
到目前为止我有这个:
\[keyword (?:id=([0-9]+))?[^\]]*\]
Run Code Online (Sandbox Code Playgroud)
这会在id之后处理任何额外的属性,但我无法弄清楚如何忽略关键字和id之间的所有内容.我知道我不能去,[^id]*
我相信我需要使用像这样的负面预测,(?!id)*但我想因为它是零宽度,它不会从那里向前移动.这也不起作用:
\[keyword[A-z0-9 =]*(?!id)(?:id=([0-9]+))?[^\]]*\]
Run Code Online (Sandbox Code Playgroud)
我一直在寻找各种例子,但没有找到任何例子.或者也许我有,但他们走到了我的脑海,我甚至没有意识到他们是什么.
救命!谢谢.
编辑:它必须匹配[keyword stuff = otherstuff],其中id =根本不存在,所以我必须在id#group上有1或0.还有其他[otherkeywords id = 32]我不想匹配.该文档需要使用preg_match_all在整个文档中匹配多个[keyword id = 3].
我需要一个正则表达式,它只会选择那些不以 .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
我正在研究用于在C#中验证URL的正则表达式.现在,我需要的正则表达式必须与http://url中的第一个正则表达不匹配.这是我的第一次尝试:
(https?:\/\/.+?)\/(.+?)(?!https?:\/\/)
Run Code Online (Sandbox Code Playgroud)
但这个正则表达式不起作用(甚至删除(?!https?:\/\/)).以此输入字符串为例:
http://test.test/notwork.http://test
Run Code Online (Sandbox Code Playgroud)
这是我的第一个疑问:为什么捕获组不(.+?)匹配notwork.http://test?懒惰的量词应尽可能少匹配,但为什么不到最后?在这种情况下,我当然错过了一些东西(首先我认为它可能与回溯相关,但我不认为是这种情况),所以我读了这个并找到了解决方案,即使我不确定是最好的因为它说
这种技术没有优于懒惰的点星
无论如何,那个解决方案就是淬火点.这是我的下一次尝试:
(https?:\/\/.+?)\/((?:(?!https?:\/\/).)*)
Run Code Online (Sandbox Code Playgroud)
现在:这个正则表达式正在运行,但不是我想要的方式.只有当网址有效时我才需要匹配.
顺便说一句,我认为我还没有完全理解新正则表达式正在做什么:为什么负面前瞻停留在之前.而不是之后呢?
所以我尝试在它之后移动它.,似乎它匹配url,直到它在第二个http之前找到倒数第二个字符.回到正确的正则表达式,我的假设是负面的前瞻实际上是试图检查.正则表达式已经读过之后的内容,这是对的吗?
其他解决方案已被广泛接受,但我首先更愿意理解这一点.谢谢.
regex ×10
lookahead ×3
c# ×1
lookbehind ×1
pcre ×1
perl ×1
permutation ×1
php ×1
python ×1
validation ×1