我试图弄清楚如何在我的WordPress博客上实现Regex。
问题
我想用某些内联样式替换某些内容,并且我正在使用Regex来完成此操作。
我的想法如下:找到用特殊符号包裹的字符串,即“〜string〜”,并用具有特定类的跨度动态替换它。
我将获得与SO的行内code
突出显示功能类似的效果,但是我没有使用反引号,而是使用“〜”作为我的选择符号(因为WordPress已经将“`”标识为代码)。
快速范例
原文
This is a demo paragraph with a wrapped string ~here~, with another string ~~here~~.
正则表达式替换后
This is a demo paragraph with a wrapped string <span class="classOne">here</span>, with another string <span class="classTwo">here</span>.
我在努力
我正在使用的正则表达式是:/~(.*?)~/,它可以很好地找到诸如“〜demo〜”之类的字符串,但是我不确定如何扩展它以便能够找到字符串带有多个分隔符,例如:“ ~~ demo ~~”。
对我而言,棘手的部分是它需要区分一个“〜”与两个,因为我想为每个结果分配不同的替换。
任何帮助,将不胜感激!提前致谢。
您可以使用
~~([\s\S]*?)~~(?!~)|~([^~]*)~
请参阅regex演示。细节:
~~([\s\S]*?)~~(?!~)
- ~~
,然后是捕获组#1,它匹配任何零个或多个字符,但应尽可能少,然后是~~
子字符串,后跟另一个~
字符|
- 要么~([^~]*)~
-一个~
,然后捕获组#2匹配零个或多个字符以外~
,再一个~
如果在PHP中使用它,则可以在与preg_replace_callback
特定捕获组匹配时使用其中可以定义单独的替换逻辑的模式。
看一个PHP演示:
$html = 'This is a demo paragraph with a wrapped string ~here~, with another string ~~here~~.';
echo preg_replace_callback('/~~([\s\S]*?)~~(?!~)|~([^~]*)~/', function ($m) {
return !empty($m[1]) ? '<span class="classTwo">' . $m[1] . '</span>' : '<span class="classOne">' . $m[2] . '</span>';
},$html);
// => This is a demo paragraph with a wrapped string <span class="classOne">here</span>, with another string <span class="classTwo">here</span>.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句