2010-02-16 46 views
11

我正在尝试使用正则表达式来查找以等号(=)开头的所有子字符串,并以分号(;)结尾,中间有任意数量的字符。它应该是这样的=*;带有=和a的正则表达式;

出于某种原因,等于没有注册。是否有某种让正则表达式注意到我的等号的转义字符?

我在爪哇工作,如果这对这个问题有任何方向。

回答

17

这可能是你在找什么。您需要指定要应用星号的字符集或通配符。

"=([^;]*);" 

您还可以使用不愿意量词:

"=(.*?);" 

使用你现在有组括号。我相信第一组是整个比赛,group[1]是在括号内找到的组。

代码可能看起来像:

Regex r = new Regex("=([^;]*);"); 
Match m = r.Match(yourData); 
while (m.Success) { 
    string match = m.Groups[1]; 
    // match should be the text between the '=' and the ';'. 
} 
+0

这引起了我什么,我一直在寻找,但有可能才发现那些分隔符之间有什么?换句话说,我想得到=和之间的内容;而没有实际上将它们包括在表达中。 谢谢 – chama

+1

如果你想在你想找到的值附近添加parens,你可以使用Matcher的group()方法来检索parens中的位。 – mkb

+0

我如何使用group()方法来做到这一点? – chama

7

这看起来对“任何数量的=迹象,包括0”

=*; 

如果你想“=后跟任意数目的其它字符”你想

=.*; 

不过,这贪婪地匹配 - 如果你想偷懒匹配(使之停止一组,当找到下一个分号),你可能会想:

=.*?; 
1

您提供的正则表达式匹配;,===;,...,================;=.*;(或=.*?;如果不需要非贪心)如何?

1

喜欢的东西= *;