正则表达式在最后一次匹配后不匹配文本
Posted
技术标签:
【中文标题】正则表达式在最后一次匹配后不匹配文本【英文标题】:Regex does not match text after last match 【发布时间】:2021-09-15 00:21:14 【问题描述】:我正在尝试获取所有文本,但不是在内联代码 (`) 或代码块 (```) 中。我的正则表达式工作正常,但最后一个文本不匹配,我不知道为什么。
我当前的正则表达式:
(.*?)`1,3(?:.*?)`1,3(.*?)
你可以在这里查看结果:https://regex101.com/r/lYQnUJ/1/
也许有人知道如何解决这个问题。
【问题讨论】:
能否请您提及您正在寻找的正则表达式是哪种语言? 使用"(?s)```.*?```|`[^`]*`"
分割(参见demo,其中匹配项被替换为“---”行)。最后一部分不匹配,因为您的正则表达式末尾的 (.*?)
与任何文本都不匹配。如果你删除它,什么都不会改变。
@RavinderSingh13:对不起,我添加了 pcre 和 php 标签。
@WiktorStribiżew:你的意思是这样的:regex101.com/r/6aqtVC/1?不幸的是,它是一样的。最后的文本部分也不匹配。 :/ 感谢最后一组可以删除的提示。
见print_r(preg_split('~```.*?```|`[^`]*`~s', $text))
3v4l.org/2kO6K。输出是你期望的吗?
【参考方案1】:
你可以使用
preg_split('~```.*?```|`[^`]*`~s', $text)
详情:
```
- 三重反引号
.*?
- 尽可能少的零个或多个字符
```
- 三重反引号
|
- 或
`
- 一个反引号
[^`]*
- 除反引号以外的零个或多个字符
`
- 一个反引号
参见regex 和PHP demo:
<?php
$text = 'your_text_here';
print_r(preg_split('~```.*?```|`[^`]*`~s', $text));
输出:
Array
(
[0] => some text here
some more
[1] =>
some
[2] => too
and more code blocks:
[3] =>
this text isn't matched...
)
【讨论】:
以上是关于正则表达式在最后一次匹配后不匹配文本的主要内容,如果未能解决你的问题,请参考以下文章