获取正则表达式以匹配同一模式的多个实例

时间:2019-03-08 12:40:31

标签: regex

所以我有这个正则表达式-regex101

\[shortcode ([^ ]*)(?:[ ]?([^ ]*)="([^"]*)")*\]

尝试匹配此字符串

[shortcode contact param1="test 2" param2="test1"]

现在,正则表达式与此匹配:

[contact, param2, test1]

我希望它与此匹配:

[contact, param1, test 2, param2, test1]

如何获取正则表达式以匹配参数模式的第一个实例,而不仅仅是最后一个?

2 个答案:

答案 0 :(得分:0)

尝试使用下面的正则表达式。

regex101

下面是您的用例,

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个以上的字符
  • "-一个"字符。

PHP demo

$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 )