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

例如:“这只是简单的句子”。

我想匹配“This is”和“sentence”之间的每个角色。 换行应该被忽略。 我无法弄清楚正确的语法。


例如

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

Regexr

我使用了lookbehind (?<=)并向前看(?=)以便“This is”和“sentence”不包含在匹配中,但这取决于您的用例,您也可以简单地写this This is(.*)sentence

这里最重要的事情是,你激活你的正则表达式引擎的“DOTALL”模式,从而使. 与换行符匹配。 但你如何做到这一点取决于你的正则表达式引擎。

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

更新

Regexr

This is(?s)(.*)sentence

(?s)打开dotall修饰符的地方,使. 匹配换行符。

更新2:

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

与你的例子相匹配“这是(一个简单的)句子”。 请参阅Regexr


需要懒惰量词

复活这个问题是因为接受的答案中的正则表达式对我来说似乎不太正确。 为什么? 因为

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

会匹配my first sentence. This is my second my first sentence. This is my second This is my first sentence. This is my second sentence. This is my first sentence. This is my second sentence.

看演示

你需要一个懒惰的量词在这两个变化之间。 添加一个? 让明星懒散。

这匹配你想要的:

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

看演示。 我删除了不需要的捕获组。

DOTALL模式以匹配整个行间断点

请注意,在演示中,“点匹配换行符模式”(aka)dot-all已设置(请参阅如何以各种语言启用DOTALL)。 在许多正则表达式中,可以使用在线修饰符(?s)来设置它,将表达式转换为:

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

参考

  • 正则表达式贪婪的许多程度
  • 用Star和Plus重复

  • 试试This is[sS]*sentence ,用javascript工作

    链接地址: http://www.djcxy.com/p/76711.html

    上一篇: Regex Match all characters between two strings

    下一篇: Regex for numbers only