PCRE正则表达式需要帮助
我在写perl兼容正则表达式时遇到了麻烦,以便在每个条件之间存在差距时匹配几个不同的东西。它更有意义,当我解释我希望它找到PCRE正则表达式需要帮助
条件是什么
- /世界/
- 一个字母
- 破折号或下划线
- 一个字母
- 单期
- 三个或四个字母
我遇到的问题是我不知道如何编写表达式,使得条件#1和#2之间可能存在差距。条件#2 - #4可以重复,但不总是。
我一直在使用多个在线正则表达式测试人员,但我无法获得一个匹配,我不知道我做错了什么。我认为正则表达式正在寻找/world/x_x
或/world/y-y
,而不是“展望”来匹配“字母短划线字母”或“字母下划线字母”模式。
当前正则表达式
/world/([a-z](-|_)[a-z]){1,}\.[a-z]{3,4}$
期望匹配(目前不匹配)
hxxp://armassimchilzeispreu.blackjackipad.com/world/activate_available.jar
hxxp://chubfaceddamsel0.affittobarcheavela.it/world/eternal_threat-clearing.html
hxxp://offdestroyengarabitar.freebookofraslot.com/world/bonus-middle-marathon.pdf
我想你想这
use strict;
use warnings;
while (<DATA>) {
chomp;
print "OK $_\n" if m</world/[a-z]+(?:[_-][a-z]+)+\.[a-z]{3,4}$>;
}
__DATA__
hxxp://armassimchilzeispreu.blackjackipad.com/world/activate_available.jar
hxxp://chubfaceddamsel0.affittobarcheavela.it/world/eternal_threat-clearing.html
hxxp://offdestroyengarabitar.freebookofraslot.com/world/bonus-middle-marathon.pdf
或者只是
m</world/[a-z-_]+\.[a-z]{3,4}$>
我想这就是它!如果你不介意,你会解释你做了什么吗?我不熟悉?:(根据文档的非捕获子模式)。我想研究这个,所以我可以更好地理解它。你不知道我是如何高兴地签署了这个签名,但我确实想确保我理解它:D – user2249813 2013-04-05 17:21:53
刚刚注意到你的第二个表情。那个也可以。我试图剖析它。 – user2249813 2013-04-05 17:31:32
[a-z -_] + - 匹配任何字母,短划线或下划线一次或多次。有一件事,我可能是错的,但即使它没有 - 或_,这将匹配一个字符串。有没有办法让它有一个强制性的字符串? – user2249813 2013-04-05 17:36:24
您希望的匹配似乎不符合您使用的条件。你说你想要以'/ world/[单个字母] [ - 或_] [另一个单个字母]开头的字符串',但是你说你想让它匹配'/ world/activate_available.jar'。 “激活”和“可用”都比一个字符长得多。 – user1618143 2013-04-05 17:02:10
另外,'eternal_threat-clearing.html'和'bonus-middle-marathon.pdf'有多个“连字符或下划线”。 – Borodin 2013-04-05 17:10:11
@ user1618143 - 我说x-x或y_y,因为我只是想确保这种模式存在,我不在乎网址有多长或什么字。我知道网址有完整的字词,但我不在乎那里有什么字。我必须完整匹配单词或word_word吗? – user2249813 2013-04-05 17:11:59