我正在尝试从字符串中捕获一个值。字符串的格式应为
01+XXXX
我希望使用正则表达式捕获XXXX。这就是我提出的 -
01+\\s*(?<1>[.0-9]*)
但这不起作用。什么工作是 -
01+\\s*(?<1>[+.0-9]*)
唯一的区别是将+添加到字符类中。我的主要问题是 - 为什么第二个表达式起作用而第一个表达式不起作用?在第一个中,我寻找01+,其余的应该是[.0-9]。在我看来,第二个想读+两次 - 这不是它的作用吗?我对正则表达式很陌生,所以我觉得我可能会错过一些小的东西。
在此网站http://www.codeproject.com/Articles/9099/The-30-Minute-Regex-Tutorial上,它表示+用于“重复一次或多次”。那么它是不是一次尝试读取01+?
答案 0 :(得分:6)
它正在读1
一次或多次。也就是说,正则表达式01+
匹配01
或011
或0111
等。
但它与+
不匹配。如果您想匹配文字+
,请为正则表达式写01\+
或01[+]
。
答案 1 :(得分:5)
+
是一个特殊字符,意思是“一次或多次”。在这种情况下,它代表01
,011
,0111
等,而不是01+
。如果你想按字面意思使用它,你需要逃避它,如下所示:\+
注意:看起来您正在使用字符串,因此您需要双重转义:\\+
它在字符类([+]
)内部工作,因为字符类从字面上理解大多数字符,包括\
和]
等。
答案 2 :(得分:3)
'+'是正则表达式中的特殊字符,表示“1次或更多次”。所以你所写的意思是:
如果你想匹配一个文字加上你需要逃避它:
01\+\\s*(?<1>[.0-9]*)
答案 3 :(得分:1)
+
是quantifier,如您链接的教程中所述。所以,你的正则表达式意味着“匹配零,然后是一个或多个,然后是零或更多的空格,然后......”。
需要转义加号:
01\\+\\s*(?<1>[.0-9]*)
你的第二个正则表达式有效,因为+有character class的一部分而且不需要在那里进行转义。
答案 4 :(得分:0)
01\+(?<cap>[\d.]*)
解释
01 '01'
\+ '+'
[\d.]* any character of: digits (0-9), '.'
(0 or more times, matching the most amount possible)