私は、Xの奇数を持つすべての文字列の数を数える半分の正規表現を持っています。文字列正規表現の文字を数えて
XAXAXA
私はそのX年代を交互にしている文字列を可能にし、余分な句を必要とする:
^[^X]*X(X{2}|[^X])*$
これは、ほぼすべてのケースのために働く:のようなものを入力するとき
X
XXX
XAA
AXXX
AAAX etc
たが失敗しましたXAXA。隣接するXパターンは既にX {2} *によってマッピングされています。
私は、Xの奇数を持つすべての文字列の数を数える半分の正規表現を持っています。文字列正規表現の文字を数えて
XAXAXA
私はそのX年代を交互にしている文字列を可能にし、余分な句を必要とする:
^[^X]*X(X{2}|[^X])*$
これは、ほぼすべてのケースのために働く:のようなものを入力するとき
X
XXX
XAA
AXXX
AAAX etc
たが失敗しましたXAXA。隣接するXパターンは既にX {2} *によってマッピングされています。
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つだけ不一致になります。
+1:Nice!私はこれがうまくいくはずだと信じている。 –
すごい偉大な - 他の方法もそれを行うことは可能ですか? A、(A [^ A] * A [^ A])* – dr85
@ dr85のように、確かに 'X'または' A'で正規表現エンジンには関係ありません。 –
非正規表現の例
これは、パフォーマンス妨げるかもしれないが、私はあなたがそれを心配しているかどうかわからないです。
String str = "AXXXAXAXXX";
char[] cArray = str.toCharArray();
int count = 0;
for (char c : cArray)
{
if (c == 'X')
count++;
}
if (count % 2 != 0)
//Odd
パフォーマンスwouldn邪魔されない。十分な大きさの文字列を取り、あなたの提案は正規表現を使うよりはるかに高速です。しかし、私の推測では、dr85は正規表現でこれをどうやって行うのか疑問に思っていたということです(私は彼/彼のコードで実際に使用しないことを望んでいます!):) –
私はいつもこのメソッドを好むでしょう。 Imは分で正規表現を学習し、それは唯一の理由です。 – dr85
あなたはまた、例えば、 'X'の奇数の実行を扱ういくつかの方法が必要です
X - match XXX - match XAA - match AXXX - match AAAX - match XAXAXA - match XXAAAAAX - match AAXX - NO match AAXXXXXXAX - match
これは、@Bart Kiersの表現を少し凝縮したものに過ぎません。 –
@エヴァン・ムラフスキー、これは一人で開発しましたが、しばらく時間がかかりました。@バート・キアーはもっと速くなりました – Valerij
おそらく私はあなたの肩を見ていました! :) –
に対してテスト
^[^X]*((X[^X]*){2})*X[^X]*$
私のために正常に動作し、これを試してみてください'AXXXAAXXX'。しかし要するに、私はこの仕事が可能であるとは思わない。 –
他のAから1つのAをダイビングしている文字の量はまあまあです。確かに可能です - 私はそれを前に見たことがありますか? – dr85