3

正規表現を使用してこの文字列を分割(または一致)するにはどうすればよいですか?

a=1,b=2,c=3,4,5,d=6,e=x,y,z

基本的な形式はname=value,name=value、値にコンマを含めることができ、名前は常に英数字です。

私は最終的に次のようにしようとしています:

a=1
b=2
c=3,4,5
d=6
e=x,y,z

私が最初に考えたのは、値にコンマが含まれているため文法があいまいであるということでしたが、名前にが含まれていないため、実行可能であると思います=

これは近いですが、末尾のコンマを各値に一致させ、最後の値と一致しませんz

(?<name>\w+)
\s*=\s*
(?<value>
\S
   (?:
      ,
      |
      .[^=]         
    )*
)

これらの一致を生成します:

a=1,
b=2,
c=3,4,5,  
d=6,
e=x,y,

ここに正規表現ウィザードはありますか?

4

3 に答える 3

3

先読みアサーションを使用して、その後にcommaan alphabet、次に、を分割することができます。分割には以下の正規表現を使用できます:-=

",(?=[a-zA-Z0-9]=)");
于 2013-02-05T19:27:35.447 に答える
0

との最終的な一致と,|.[^=]は、.[^=]任意の文字の後にそうでない文字が続くことを意味します=。ただし、zその後には何もありません。=代わりに、任意の文字の後に文字列の末尾または末尾以外の文字を含める必要があります。

,
|
.(?:[^=]|$)

これがphpを使用して機能することを確認しましたpreg_match_all

于 2013-02-05T19:25:42.980 に答える
0

正規表現エンジンが先読みアサーションをサポートしている場合は、これを試すことができます。

(\w)=(\w(,\w(?!=))*)

注:\w以前は短くしていました。英数字のみを照合する場合は、\w代わりに置換します[a-zA-Z0-9]

regexpalで正常に動作します

編集:RohitJainによってバストされました

于 2013-02-05T19:54:46.133 に答える