两个字符串之间的正则表达式匹配,包括那些字符串

Posted

技术标签:

【中文标题】两个字符串之间的正则表达式匹配,包括那些字符串【英文标题】:regex match between two strings including those strings 【发布时间】:2014-02-04 14:49:03 【问题描述】:

示例字符串:

--
    some text
--

我正在尝试匹配 -- 直到并包括第一个 -- 之间的任何内容 它还需要捕获返回和换行符。

我尝试过这样的事情:\\--[^\r\n]--\\ 似乎捕获了括号之间的所有内容,但我不太清楚如何捕获括号。

编辑 我正在尝试修改一个崇高的文本插件,为 laravel 的刀片模板添加语法高亮。如下所述: '(--[\s\S]*--)' 匹配我想要匹配的内容。括号可能被不同的规则覆盖。

【问题讨论】:

您的示例也匹配括号(括号在正则表达式中列出)。您在什么环境中执行此操作(您的正则表达式引擎和界面是什么)?您的示例很好,只是它不允许换行。如果我更了解您的环境以及您认为您的示例没有包含括号的原因,我可以帮助您解决这个问题。 嗯。老实说,我不知道。基本上我在看一个 Sublime Text 2 的插件,它为 Laravel 的刀片模板添加了语法高亮。它的 cmets 不包含新行,所以我试图修复它,然后遇到了这个问题。仅适用于第一行的原件是:\\--(?=(|\s*|))(.+|)(?=(|--\\|)),如果有帮助的话。 【参考方案1】:

你可以使用这个正则表达式:

(\\--[\s\S]*--\\)

在线演示:http://regex101.com/r/mT1jT4

说明:

1st Capturing group (\\--[\s\S]*--\\)
\ matches the character  literally
\ matches the character  literally
-- matches the characters -- literally
[\s\S]* match a single character present in the list below
Quantifier: Between zero and unlimited times, as many times as possible,
            giving back as needed [greedy]
\s match any white space character [\r\n\t\f ]
\S match any non-white space character [^\r\n\t\f ]
-- matches the characters -- literally
\ matches the character  literally
\ matches the character  literally

【讨论】:

这是一个甜蜜的网站!谢谢 - 这确实匹配正确......虽然在这种情况下它仍然没有达到我的预期。我的猜测是稍后会应用其他规则。不过,我仍然会将其标记为正确,因为这是按照我的要求进行的。谢谢!

以上是关于两个字符串之间的正则表达式匹配,包括那些字符串的主要内容,如果未能解决你的问题,请参考以下文章

C正则表达式,匹配两个字符串之间的内容

正则表达式怎么匹配前面紧跟某个字符串的字符

正则表达式截取两个指定字符串之间的内容?

正则表达式匹配两个字符串之间的所有字符

两个字符串之间的正则表达式匹配?

使用正则表达式查找两个字符串之间的多个匹配项