例子:
This is just\na simple sentence
.
我想匹配在 This is
和 sentence
之间的每一个字符。忽略换行符。我无法找出正确的语法。
例子:
This is just\na simple sentence
.
我想匹配在 This is
和 sentence
之间的每一个字符。忽略换行符。我无法找出正确的语法。
(?<=This is)(.*)(?=sentence)
我使用了lookbehind(?<=)
和look ahead(?=)
,这样就不会在匹配时包括"This is" 和 "sentence",但这取决于您的用例,您也可以简单地编写This is(.*)sentence
。
这里重要的是您要激活正则表达式引擎中的“dotall”模式,以便.
匹配换行符。但如何实现这一点取决于您的正则表达式引擎。
接下来需要考虑使用.*
还是.*?
。第一个是贪婪模式,将匹配到字符串中最后一个"sentence",而第二个是非贪婪模式,将匹配到字符串中下一个"sentence"。
更新
This is(?s)(.*)sentence
当 (?s) 开启 dotall 修饰符时,.
将匹配换行符。
更新2:
(?<=is \()(.*?)(?=\s*\))
是否与您的示例"This is (a simple) sentence"匹配。请查看Regexr。
重新提出这个问题,因为接受答案中的正则表达式似乎对我来说不完全正确。为什么呢? 因为
(?<=This is)(.*)(?=sentence)
在 This is my first sentence. This is my second sentence.
中,my first sentence. This is my second
将匹配。
查看示例。
你需要在两个lookaround之间加入一个lazy quantifier。在星号后面添加一个 ?
使它变为lazy。
这就是你想要的匹配结果:
(?<=This is).*?(?=sentence)
查看演示。我移除了不必要的捕获组。
使用DOTALL模式跨越换行匹配
请注意,在演示中设置了“点匹配所有字符模式”(即dot-all)(请参见如何在各种语言中打开DOTALL模式)。在许多正则表达式版本中,您可以使用在线修饰符(?s)
来设置它,使表达式变为:
(?s)(?<=This is).*?(?=sentence)
参考资料
.*
和.*?
之间的区别也在我的答案中有所解释(“更新”前的段落)。因此,我认为我的答案是正确的。 - stema尝试使用 This is[\s\S]*?sentence
,可以在JavaScript中工作。
[\s\S]*?
(也称为:非贪婪通配符) - phil294这个:
This is (.*?) sentence
在 JavaScript 中运作。
"This is just\na simple sentence".match(/This is (.*?) sentence/)
返回了 null
。而 "This is just\na simple sentence".match(/This is (.*?) sentence/s)
则返回了有用的结果。区别在于最后一个斜杠后面的 DOTALL s
。 - Marcus(?<=beginningstringname)(.*\n?)(?=endstringname)
。endstringname
之前。 - OGHaza.*\n?
(在环视之间),为什么不只是 .*
? - undefined[^]
来匹配包括换行符在内的任何字符。.
的/s
标志来匹配任何字符也可以起作用,但是应用于整个模式,JavaScript不支持内联修饰符来开启/关闭标志。This is([^]*?)sentence
查看regex101演示。
顺便提一下,为了不匹配部分单词,您可以使用单词边界,例如\bThis
和sentence\b
。
const s = "This is just\na simple sentence";
const regex = /This is([^]*?)sentence/;
const m = s.match(regex);
if (m) {
console.log(m[1]);
}
(?<=This is)[^]*?(?=sentence)
,您可以查看JS正则表达式中的回顾以获取支持。const s = "This is just\na simple sentence";
const regex = /(?<=This is)[^]*?(?=sentence)/;
const m = s.match(regex);
if (m) {
console.log(m[0]);
}
这对我很有用(我正在使用VS Code):
对于:
This is just\na simple sentence
使用:
This .+ sentence
\This is .*? \sentence
。#<Inventory:0x000055c8a2966b60 id: nil, batch_code: "10324"
并只留下了 "10324"。 - buncis使用Java方法进行正则表达式匹配两个字符串之间的所有内容。
List<String> results = new ArrayList<>(); //For storing results
String example = "Code will save the world";
让我们使用Pattern和Matcher对象来使用正则表达式(.?)*。
Pattern p = Pattern.compile("Code "(.*?)" world"); //java.util.regex.Pattern;
Matcher m = p.matcher(example); //java.util.regex.Matcher;
由于Matcher可能包含多个匹配项,我们需要循环处理结果并将其存储。
while(m.find()){ //Loop through all matches
results.add(m.group()); //Get value and store in collection.
}
这个例子只包含"will save the"这个词,但在更大的文本中可能会找到更多匹配项。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
node{
stage("parse"){
def file = readFile 'build.log'
def regex = ~"(?s)(firstStringToUse(.*)secondStringToUse)"
Matcher match = regex.matcher(file)
match.find() {
capturedText = match.group(1)
error(capturedText)
}
}
}
This is(?s)(.*)sentence
可以工作? - stema