regex 如何在正则表达式中获取标签名?

2izufjch  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(100)

我尝试从代码中获取所有标签名称:

$str = "Lorem ipsum [B]dolor[/b] sit amet, consectetur adipiscing elit. Aenean vestibulum orci sed ante malesuada vulputate. [Link]In tempus[/Link], lacus eu luctus fringilla, ligula dui scelerisque justo, sit amet mollis velit turpis a nunc. Pellentesque interdum risus quis nisl vestibulum congue. Nam vel dolor [i]sit[/i] amet urna eleifend consequat eget tincidunt neque. Maecenas sed justo sed dolor rhoncus malesuada. Maecenas ut mauris eu sem auctor viverra eu non mi. Duis in enim nec orci molestie facilisis. Vivamus sit amet maecenas porttitor urna. Maecenas cursus fermentum bibendum. Sed a nulla lectus, nec eleifend magna. Sed eu turpis non tortor ornare vestibulum eu eget risus.";

$expr= '~' . '(\[[a-z]+\])' . '([a-z]*)' . '/\1' . '~iU';
$result = preg_match_all($expr, $str, $found);

但是我得到了3个空数组,我想最后一个'/\1'是无效的,但未能修复它。..哪个表达式有效?
先谢谢你了!

r55awzrz

r55awzrz1#

您可以使用此正则表达式并抓取捕获组#1作为标记名称:

(?i)\[(\w+)].*?\[/\1]

RegEx Demo

RegEx详情:

  • (?i):启用忽略大小写模式
  • \[:匹配[
  • (\w+):匹配1+单词字符并将其捕获到组#1中
  • ]:匹配]
  • .*?:匹配0个或多个字符
  • \[:匹配[
  • /\1:匹配/,后跟组#1中的值捕获
  • ]:匹配]

Code Demo

验证码:

$str = "Lorem ipsum [B]dolor[/b] sit amet, consectetur adipiscing elit. Aenean vestibulum orci sed ante malesuada vulputate. [Link]In tempus[/Link], lacus eu luctus fringilla, ligula dui scelerisque justo, sit amet mollis velit turpis a nunc. Pellentesque interdum risus quis nisl vestibulum congue. Nam vel dolor [i]sit[/i] amet urna eleifend consequat eget tincidunt neque. Maecenas sed justo sed dolor rhoncus malesuada. Maecenas ut mauris eu sem auctor viverra eu non mi. Duis in enim nec orci molestie facilisis. Vivamus sit amet maecenas porttitor urna. Maecenas cursus fermentum bibendum. Sed a nulla lectus, nec eleifend magna. Sed eu turpis non tortor ornare vestibulum eu eget risus.";
 
if (preg_match_all('~(?i)\[(\w+)].+?\[/\1]~', $str, $m)) {
    print_r ($m[1]);
}

输出:

Array
(
    [0] => B
    [1] => Link
    [2] => i
)

相关问题