我有一个字符串的三种变体:
1. view=(edit:29,30)
2. view=(edit:29,30;)
3. view=(edit:29,30;x:100;y:200)
我需要一个RegExp:
我想出了:
$pat = '/view=\((\w+)(:)([\d,]+)((;[^)]+){0,}|;)\)/';
应用于'view =(编辑: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);
谢谢!
答案 0 :(得分:4)
您无需对所有内容进行分组。试试这个正则表达式:
/view=\((\w+):([\d,]+)(?:;([^)]+)?)?\)/
答案 1 :(得分: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