【发布时间】:2011-01-17 11:22:33
【问题描述】:
我正在尝试使用正则表达式来查找以等号 (=) 开头并以分号 (;) 结尾且中间包含任意数量的字符的所有子字符串。应该是这样的=*;
由于某种原因,equals 没有注册。是否有某种转义字符会使正则表达式注意到我的等号?
如果这对这个问题有任何影响,我正在使用 Java。
【问题讨论】:
我正在尝试使用正则表达式来查找以等号 (=) 开头并以分号 (;) 结尾且中间包含任意数量的字符的所有子字符串。应该是这样的=*;
由于某种原因,equals 没有注册。是否有某种转义字符会使正则表达式注意到我的等号?
如果这对这个问题有任何影响,我正在使用 Java。
【问题讨论】:
这会查找“任意数量的 = 符号,包括 0”
=*;
如果你想要“= 后跟任意数量的其他字符”
=.*;
但是,这会贪婪地匹配 - 如果您想要惰性匹配(以便在找到下一个分号时停止一个组),您可能想要:
=.*?;
【讨论】:
您提供的正则表达式将匹配 ;、===;、...、================;。 =.*;(或者 =.*?;,如果需要非贪婪)怎么样?
【讨论】:
这可能是您正在寻找的。您需要指定要应用星号的字符集或通配符。
"=([^;]*);"
你也可以使用不情愿的量词:
"=(.*?);"
使用括号你现在有组。我相信第一组是整场比赛,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 ';'.
}
【讨论】:
类似 =.*;
【讨论】:
学习 Java 正则表达式的绝佳资源:sun's book about regexp
【讨论】: