2012-04-18 7 views
2

aibicidieif(より複雑な文字列であるが同様の書式の)サンプル・ストリングがあり、(?<=i).*?(?=i)のような正規表現を試しましたが、最初と最後の要素afは取り込まれません。正規表現でオプションのアサーションを作成するには?

iの区切り文字の間にすべてを入れたいが、正規表現では前後にiの文字しか検索しない。 (?=i)(?<=i)をオプションにする方法はありますか?

http://regexr.com?30mjf

+0

をF.Mü[email protected]:

あなたの言語が可変長lookbehindsをサポートしていない場合は、ここではまだ動作するはずの代替であります'、またはそれは"; lookbehindを削除するだけでもいいです(先読みの場合も同じです)。いくつかの正規表現のフレーバは、定量化されたアサーションを構文エラーとして扱います。 –

+0

Btw、__does__を提供した正規表現は 'f'を捕捉します – alan

+0

私は間違っている可能性がありますが、'? '演算子は先読み/後ろに機能するとは思いません。 – alan

答えて

4

あなたはどの言語を使用していますか?ほとんどの言語では、Pythonで、たとえば、正規表現を使って文字列を分割することができます:

>>> re.split(r'i', 'aibicidieifi') 
['a', 'b', 'c', 'd', 'e', 'f', ''] 

ここr'i'は、より複雑な正規表現が何であれ表す文字列に置換することができます。

また、あなたがこのような何か行うことができます:先読みに交互にアンカーを追加することにより

(?<=i|^).*?(?=i|$) 

を、あなたは今まだしかし、いくつかの言語をサポートしていない、文字列の開始時と終了時の文字と一致します後読みこれは動作しない可能性がありますので、可変長lookbehinds。 ``(<= I?)それは私 `が先行しています」を意味します?

(?:(?<=i)|^).*?(?=i|$) 
+0

はい、あなたの正規表現は私が探しているものです。私はこれを行うために利用できる関数があることを知っていますが、私は純粋な正規表現のソリューションを探していました。 – Ryder

0

は単に[^i]+は仕事をしませんか?入力文字列と区切り文字を想定すると、

+0

この場合は、OPがより複雑になる可能性があると言いました。したがって、現在見ている部分と先読みはおそらく単なる文字。 –

+0

そうです、それは理にかなっています。 –

0

$valuesArray = explode('i', $input); 

が次に作成された配列からの値にアクセスするだけ行う、ことは、あなたがそれらを作っているように簡単です。

関連する問題