正则表达式在字符串的开头,内部和结尾获取捕获组

时间:2016-06-28 19:54:02

标签: regex pcre

问题在线显示https://regex101.com/r/vW3vO8/1

我想让ma模式变得更好。它应该获取由代码片段划分的主题字符串的一部分。在示例中,代码片段只是php,js和html行。他们必须分开。

正则表达式:

(\[\/code\].*?\[code[^\]]*?\])

示例字符串:

abc
[code lang='javascript']
    var a = 2.5;
[/code]
bcd
[code lang='php']
    $this->foo();
[/code]
cde
[code lang='html']
    <p clas = 'bar'><span>hello world</span></p>
[/code]
dez

所以正则表达式得到

[/code]
bcd
[code lang='php']

[/code]
cde
[code lang='html']

这没关系,但我还需要一开始的部分就是这个

abc
[code lang='javascript']

以及那就是

[/code]
dez

是否可以通过单一的正则表达式模式实现它? 谢谢

1 个答案:

答案 0 :(得分:2)

您可以在OR(^)构造中对字符串的开头($)和结束(|)执行匹配:

((^|\[\/code\]).*?(\[code[^\]]*?\]|$))

Regex tester

您可能会发现此变体很有用,它会捕获相同的内容,但标记除外:

(?<=^|\[\/code\])\s*(.*?)\s*(?=\[code[^\]]*?\]|$)

对于样本输入,匹配:

  • ABC
  • BCD
  • CDE
  • DEF

Regex tester