2009-06-11 15 views
0

私は、文字列の3つのバリエーションがあります:私は正規表現を必要とするPHP/Javascriptの正規表現 - 非キャプチャグループ

1. view=(edit:29,30) 
2. view=(edit:29,30;) 
3. view=(edit:29,30;x:100;y:200) 

をその:までを含む

  1. キャプチャアップ」、30"
  2. キャプチャ "x:100; y:200" - 最初のマッチの後にセミコロンがあるときはいつでも。
  3. いずれのグループにも左端のセミコロンは含まれません。
  4. 最初のセミコロンの右側の文字列全体と ')'は同じグループ内にある必要があります。適用

    $pat = '/view=\((\w+)(:)([\d,]+)((;[^)]+){0,}|;)\)/'; 
    

は私が思い付いた 'ビュー=(編集:29,30; X:100、Yは:200)' が得られます。

Array 
(
    [0] => view=(edit:29,30;x:100;y:200) 
    [1] => edit 
    [2] => : 
    [3] => 29,30 
    [4] => ;x:100;y:200 
    [5] => ;x:100;y:200 
) 

質問。 ';'を削除するにはどうすればいいですか?マッチ[4]と[5]から?同じRegExpは、セミコロンがない場合は 'view =(edit:29,30)'のように文字列で処理する必要があります。

$pat = '/view=\((\w+)(:)([\d,]+)((;[^)]+){0,}|;)\)/'; 
$str = 'view=(edit:29,30;x:100;y:200)'; 
preg_match($pat, $str, $m); 
print_r($m); 

ありがとう!

答えて

4

すべてをグループ化する必要はありません。私はあなたがこのような何かをしたいと思い

/view=\((\w+):([\d,]+)(?:;([^)]+)?)?\)/ 
0

$pattern = '/view=\\((\\w+):(\\d+,\\d+)(?:;((?:\\w+:\\d+;?)*))?\\)/'; 

[0] view=(edit:29,30;x:100;y:200) 
[1] edit 
[2] 29,30 
[3] x:100;y:200 
を返す必要があり、この正規表現を試してみてください
関連する問題