1

当每个条件之间存在差距时,我无法编写与 perl 兼容的正则表达式来匹配一些不同的事物。当我解释我想要它找到的东西时,它更有意义

条件

  1. /世界/
  2. 一个字母
  3. 破折号或下划线
  4. 一个字母
  5. 一个时期
  6. 三四个字母

我遇到的问题是我不知道如何编写表达式,使得条件#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
4

1 回答 1

3

我想你想要这个

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}$>
于 2013-04-05T17:07:45.447 回答