计算字符串正则表达式中的字母

时间:2011-01-19 20:47:52

标签: java regex

我有一个正则表达式可以计算所有具有奇数X的字符串。

^[^X]*X(X{2}|[^X])*$

几乎适用于所有情况:

X
XXX
XAA
AXXX
AAAX etc

但在键入以下内容时失败:

XAXAXA

我需要一个额外的子句,允许具有交替X的字符串是XAXA。 X {2} *已经映射了连续的X模式。

3 个答案:

答案 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