1

我正在尝试从字符串中捕获一个值。字符串的格式应该是

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+ ?

4

5 回答 5

6

它正在阅读1一次或多次。也就是说,正则表达式01+匹配01or 011or0111等​​。

但它与+. 如果要匹配文字+,请为正则表达式编写01\+01[+]

于 2012-07-18T17:46:50.653 回答
5

the+是一个特殊字符,意思是“一次或多次”。在这种情况下,它表示01, 011,0111等而不是01+。如果您想按字面意思使用它,则需要将其转义,如下所示:\+

注意:看起来您正在将它与字符串一起使用,因此您需要双重转义:\\+

它在字符类 ( [+]) 中工作,因为字符类从字面上理解大多数字符,包括\and在内的例外]

于 2012-07-18T17:47:30.953 回答
3

'+' 是正则表达式中的特殊字符,表示“1 次或多次”。所以你写的意思是:

  • 字符“0”
  • 字符“1”一次或多次
  • 空格 0 次或多次
  • 等等

如果要匹配文字加号,则需要对其进行转义:

01\+\\s*(?<1>[.0-9]*)
于 2012-07-18T17:48:19.080 回答
1

+是一个量词,如您链接的教程中所述。所以,你的正则表达式的意思是“匹配一个零,然后是一个或多个,然后是零个或多个空格,然后......”。

加号需要转义:

01\\+\\s*(?<1>[.0-9]*)

您的第二个正则表达式有效,因为 + 是字符类的一部分,不需要在那里转义。

于 2012-07-18T17:48:49.737 回答
0
01\+(?<cap>[\d.]*)

解释:

01                       '01'

\+                       '+'

[\d.]*                   any character of: digits (0-9), '.' 
                         (0 or more times, matching the most amount possible)
于 2012-07-18T17:54:34.063 回答