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

0xb*_*00d 378 regex

示例:"这只是一个简单的句子".

我想匹配"This is"和"sentence"之间的每个字符.换行符应该被忽略.我无法弄清楚正确的语法.

ste*_*ema 562

例如

(?<=This is)(.*)(?=sentence)
Run Code Online (Sandbox Code Playgroud)

Regexr

我使用了lookbehind (?<=)并向前看,(?=)因此"This is"和"sentence"不包括在匹配中,但这取决于你的用例,你也可以简单地写一下This is(.*)sentence.

这里重要的是你激活你的正则表达式引擎的"dotall"模式,以便.匹配换行符.但是你如何做到这一点取决于你的正则表达式引擎.

接下来就是你使用.*或者.*?.第一个是贪婪的,将匹配到你的字符串中的最后一个"句子",第二个是懒惰的,将匹配到你的字符串中的下一个"句子".

更新

Regexr

This is(?s)(.*)sentence
Run Code Online (Sandbox Code Playgroud)

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

更新2:

(?<=is \()(.*?)(?=\s*\))
Run Code Online (Sandbox Code Playgroud)

是匹配你的例子"这是(一个简单的)句子".请参阅Regexr

  • 只有一个注释 - regexr说现在javascript中不支持lookbehind (24认同)
  • 有没有办法处理文本块中这种拆分的重复实例?例如:“这只是\na简单的句子。这是一些额外的东西。这只是\na简单的句子。这里还有一些东西。这只是\na简单的句子。”。目前它匹配整个字符串,而不是每个实例。 (2认同)

zx8*_*x81 162

懒惰的量词需要

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

(?<=This is)(.*)(?=sentence)
Run Code Online (Sandbox Code Playgroud)

将匹配my first sentence. This is my secondThis is my first sentence. This is my second sentence.

见演示.

在两个外观之间需要一个懒惰的量词.添加一个?让这个明星变得懒惰.

这符合你的要求:

(?<=This is).*?(?=sentence)
Run Code Online (Sandbox Code Playgroud)

见演示.我删除了不需要的捕获组.

DOTALL模式匹配跨线断点

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

(?s)(?<=This is).*?(?=sentence)
Run Code Online (Sandbox Code Playgroud)

参考

  • @stema对不起,您昨天在浏览您的一些答案时,这是唯一让我抽搐的答案。:)我将第一行从“不正确”软化到“对我来说似乎不太正确” ...希望这不会使*您*抽搐,可能只是对这种正则表达式的理解有所不同高流量的答案应该是。 (2认同)

kao*_*ore 37

尝试This is[\s\S]*sentence,在JavaScript中工作

  • @AwQiruiGuo同上.`[\ s\S]*?`(也称为:非贪心的通配符) (3认同)

Riy*_*eed 16

这个:

This is (.*?) sentence
Run Code Online (Sandbox Code Playgroud)

适用于javascript.


小智 13

用这个: (?<=beginningstringname)(.*\n?)(?=endstringname)


Ros*_*mer 5

这对我有用(我正在使用VS Code):

为了: This is just\na simple sentence

使用: This .+ sentence


The*_*ird 5

对于 JavaScript,您可以用来[^]匹配任何字符,包括换行符

使用/s带有点的标志.来匹配任何字符也可以,但应用于整个模式,并且 JavaScript 不支持内联修饰符来打开/关闭标志。

为了匹配尽可能少的字符,您可以通过附加问号来使量词变得非贪婪,并使用捕获组来提取之间的部分。

This is([^]*?)sentence
Run Code Online (Sandbox Code Playgroud)

请参阅regex101 演示

作为旁注,为了不匹配部分单词,您可以使用单词边界,例如\bThissentence\b


JavaScript 中的环视变体是(?<=This is)[^]*?(?=sentence),您可以检查JS 正则表达式中的环视以获取支持。

另请参阅有关 Lookbehind 的重要说明

const s = "This is just\na simple sentence";
const regex = /This is([^]*?)sentence/;
const m = s.match(regex);

if (m) {
  console.log(m[1]);
}
Run Code Online (Sandbox Code Playgroud)