我需要使用正则表达式捕获类名的所有实例和变体,但我无法弄清楚正确的模式,当前它与引号内的整个文本匹配
我打算在php preg_replace_callback()中使用该模式
['"].*([a-zA-Z0-9-_]*elementor[a-zA-Z0-9-_]*).*['"]
我测试的文字是
$backgroundVideoContainer.addClass('elementor-edit new-elementor-invisible class-new');
$backgroundVideoContainer.addClass('elementor-loading elementor-invisible');
$backgroundVideoContainer.addClass('media noelementor');
演示位于https://regex101.com/r/ykVhYy/3
使用上述模式,它可以捕获以下内容:
匹配1:元素不可见
匹配2:元素不可见
匹配3:元素
预期结果 应为:
文本行1:元素编辑,新元素不可见
文本行2:元素加载,元素或不可见
文本行3:不匹配
答案 0 :(得分:2)
您可以使用\G
指令在PHP中使用此正则表达式:
(?:'|(?!^)\G)\h*(?:([\w-]*\belementor\b[\w-]*)|[\w-]+)\b(?=[\w\h-]*')
\G
在上一场比赛的末尾或首场比赛的字符串开头断言位置(?=[\w\h-]*')
是肯定的预言,可以断言我们在0个或多个单词,空格或连字符之后加一个单引号。请注意,您的匹配项在捕获的#1组中可用。
PHP代码:
$re = '/(?:'|(?!^)\G)\h*(?:([\w-]*\belementor\b[\w-]*)|[\w-]+)\b(?=[\w\h-]*')/m';
$str = '$backgroundVideoContainer.addClass(\'elementor-edit new-elementor-invisible class-new\');
$backgroundVideoContainer.addClass(\'elementor-loading elementor-invisible\');
$backgroundVideoContainer.addClass(\'media noelementor\');';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the match result from group #1
print_r($matches[1]);