2012-01-18 53 views

回答

2

这是因为\w也符合数字下划线。因此,吞下所有的输入,但在以“回馈”为正则表达式来满足:

# before matching 
regex: |^\w+(\d{1,2}_\d{1,2}_\d{1,3})$ 
input: |TextBoxKunde85_3_0 
#^
regex: ^|\w+(\d{1,2}_\d{1,2}_\d{1,3})$ 
input: |TextBoxKunde85_3_0 
# \w+ 
regex: ^\w+|(\d{1,2}_\d{1,2}_\d{1,3})$ 
input: TextBoxKunde85_3_0| 
# \d{1,2}: no... Must give back 
regex: ^\w+|(\d{1,2}_\d{1,2}_\d{1,3})$ 
input: TextBoxKunde85_3_|0 
# \d{1,2}: match 
regex: ^\w+(\d{1,2}|_\d{1,2}_\d{1,3})$ 
input: TextBoxKunde85_3_0| 
# _: no, give back 
# etc etc 

更换\w[a-zA-Z],它应该做的伎俩。

1

\w+(\d{1,2}):第一个贪婪的globbing获胜。

这里\w+会因此吃掉8

两个解决方案:

  • \w后使用非贪婪的重复。
  • 删除^\w+一部分:你不抓住它...
+0

@fge - 为什么downvote? – 2012-01-18 14:11:27

+0

@Lieven:投票是匿名的,你为什么认为它是@fge? – Benoit 2012-01-18 14:20:55

+0

@Lieven由于滥用惰性量词 - 输入是“一个或多个字母,后跟一个或多个数字,后面是...”,因此输入可以用一种不需要懒惰的量词。这种构造被滥用,滥用和滥用。 – fge 2012-01-18 14:24:07

相关问题