为了账号安全,请及时绑定邮箱和手机立即绑定

Regex匹配两个字符串之间的所有字符。

Regex匹配两个字符串之间的所有字符。

扬帆大鱼 2019-06-10 16:20:12
Regex匹配两个字符串之间的所有字符。例子:“这只是\n简单的句子”。我想在“这是”和“句子”之间匹配每一个字符。应忽略换行符。我搞不懂正确的语法。
查看完整描述

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

例如

(?<=This is)(.*)(?=sentence)

雷杰克斯

我用的是看台(?<=)向前看(?=)所以“这是”和“句子”不包括在匹配中,但是这取决于您的用例,您也可以简单地编写This is(.*)sentence.

这里最重要的是激活regex引擎的“dotall”模式,这样.正在匹配换行符。但是你是如何做到这一点的取决于你的正则表达式引擎。

下一件事是如果你用.*.*?..第一个是贪婪的,将匹配到你的字符串中的最后一个“句子”,第二个是懒惰的,将匹配到你的字符串中的下一个“句子”。

更新

雷杰克斯

This is(?s)(.*)sentence

其中,(?s)打开dotal修饰符,使.匹配换行符。

更新2:

(?<=is \()(.*?)(?=\s*\))

与你的例子“这是(一个简单的)句子”相匹配。看这里雷杰克斯


查看完整回答
反对 回复 2019-06-10
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

懒惰量词

重新提出这个问题,因为在我看来,公认答案中的准则似乎不太正确。为什么?因为

(?<=This is)(.*)(?=sentence)

将匹配my first sentence. This is my second在……里面This is my first sentence. This is my second sentence.

见演示.

你需要在两个看台之间设置一个懒惰的量词。添加?让星星变得懒惰。

这符合您的要求:

(?<=This is).*?(?=sentence)

见演示..我删除了捕获组,这是不需要的。

DOTALL模式以匹配跨线中断

注意,在演示中,“点匹配换行模式”(a.k.a.)点-所有设置(见如何用各种语言打开DOTALL)。在许多regex风格中,您可以使用在线修饰符来设置它。(?s),把这句话变成:

(?s)(?<=This is).*?(?=sentence)

参照系


查看完整回答
反对 回复 2019-06-10
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

试一试This is[\s\S]*sentence,在javascript中工作


查看完整回答
反对 回复 2019-06-10
  • 3 回答
  • 0 关注
  • 873 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信