我有一个正则表达式可以计算所有具有奇数X的字符串。
^[^X]*X(X{2}|[^X])*$
几乎适用于所有情况:
X
XXX
XAA
AXXX
AAAX etc
但在键入以下内容时失败:
XAXAXA
我需要一个额外的子句,允许具有交替X的字符串是XAXA。 X {2} *已经映射了连续的X模式。
答案 0 :(得分:5)
以下正则表达式匹配由不均匀数量的X
组成的字符串:
^[^X]*(X[^X]*X[^X]*)*X[^X]*$
快速分解:
^ # the start of the input
[^X]* # zero or more chars other than 'X'
( # start group 1
X[^X]* # an 'X' followed by zero or more chars other than 'X'
X[^X]* # an 'X' followed by zero or more chars other than 'X'
) # end group 1
* # repeat group 1 zero or more times
X # an 'X'
[^X]* # zero or more chars other than 'X'
$ # the end of the input
因此,重复的组1会导致匹配零,或偶数个X
匹配,而后面的单X
使其不均匀。
答案 1 :(得分:0)
非正则表达式示例
这可能会影响性能,但我不确定你是否担心这一点。
String str = "AXXXAXAXXX";
char[] cArray = str.toCharArray();
int count = 0;
for (char c : cArray)
{
if (c == 'X')
count++;
}
if (count % 2 != 0)
//Odd
答案 2 :(得分:0)
^[^X]*((X[^X]*){2})*X[^X]*$
测试
X - match XXX - match XAA - match AXXX - match AAAX - match XAXAXA - match XXAAAAAX - match AAXX - NO match AAXXXXXXAX - match