需要帮助改进正则表达式

时间:2012-02-06 18:00:08

标签: regex perl

我的正则表达式匹配一个我不希望它匹配的字符串的问题。我似乎无法找到表达式的正确语法。这是一个例子:

字符串:

ABC098765432109,~~Z 10Y-123~This is a test^ABC-DE-_F

正则表达式:

m/^.\*?,\d\*[\~]{2}\w\s\d\*\w-\d\*~.\*?\^.\*?-.\*?-.\*?_\w$/

我认为,\d*部分会删除逗号后面没有数字的字符串。

有关让此方法发挥作用的任何建议吗?

2 个答案:

答案 0 :(得分:3)

*表示“零或更多”,因此它也不会匹配任何数字。

使用\d+\d\d*匹配至少一位数

答案 1 :(得分:1)

"*"表示“零或更多”。您可能需要"+",这意味着“一个或多个”。所以,

m/^.*?,\d+[\~]{2}\w\s\d*\w-\d*~.*?\^.*?-.*?-.*?_\w$/

不符合

",~~Z 10Y-123~This is a test^ABC-DE-_F"