所以我有这个正则表达式-regex101:
\[shortcode ([^ ]*)(?:[ ]?([^ ]*)="([^"]*)")*\]
尝试匹配此字符串
[shortcode contact param1="test 2" param2="test1"]
现在,正则表达式与此匹配:
[contact, param2, test1]
我希望它与此匹配:
[contact, param1, test 2, param2, test1]
如何获取正则表达式以匹配参数模式的第一个实例,而不仅仅是最后一个?
答案 0 :(得分:0)
尝试使用下面的正则表达式。
下面是您的用例,
var testString ='[简码联系人param1 =“测试2” param2 =“ test1”]';
var regex = / [\ w \ s] +(?= [\ =“] | \”)/ gm;
找到的变量= paragraph.match(regex);
如果您登录找到,您将看到结果为
[“ shortcode contact param1,” test 2“,” param2“,” test1“]
仅当后跟 =“ 或” 时,正则表达式才会匹配所有字母数字字符,包括下划线和空格。
我希望这会有所帮助。
答案 1 :(得分:0)
您可以使用
'~(?:\G(?!^)\s+|\[shortcode\s+(\S+)\s+)([^\s=]+)="([^"]*)"~'
请参见regex demo
详细信息
(?:\G(?!^)\s+|\[shortcode\s+(\S+)\s+)
-(\G(?!^)\s+
或(|
)之后的上一个匹配项的末尾和1+个空格
\[shortcode
-文字字符串\s+
-超过1个空格(\S+)
-第1组:一个或多个非空白字符\s+
-超过1个空格([^\s=]+)
-第2组:除空格和=
之外的1个以上的字符="
-文字子字符串([^"]*)
-第3组:"
之外的0个以上的字符"
-一个"
字符。$re = '~(?:\G(?!^)\s+|\[shortcode\s+(\S+)\s+)([^\s=]+)="([^"]*)"~';
$str = '[shortcode contact param1="test 2" param2="test1"]';
$res = [];
if (preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0)) {
foreach ($matches as $m) {
array_shift($m);
$res = array_merge($res, array_filter($m));
}
}
print_r($res);
// => Array( [0] => contact [1] => param1 [2] => test 2 [3] => param2 [4] => test1 )