Java 如何仅在单行上匹配正则表达式模式?

Java 如何仅在单行上匹配正则表达式模式?,java,regex,Java,Regex,我有以下正则表达式和示例输入: 正如你所看到的,它与第一个“yo”匹配。我只希望模式匹配同一行(第二个“yo”)模式与“切割我” 如何确保正则表达式匹配只在同一行上 输出: Hi 预期输出(这是我真正想要的): 您可以将此正则表达式与s(DOTALL)正则表达式标志一起使用: ^.*?(?=yo\b[^\n]*cut me:) 在线演示: yo\b[^\n]*cut me:是一种前瞻模式,它确保具有单词边界的yo和cut me:在同一行中匹配。删除s或DOTALL标志,并将正则表达式更改为

我有以下正则表达式和示例输入:

正如你所看到的,它与第一个“yo”匹配。我只希望模式匹配同一行(第二个“yo”)模式与“切割我”

如何确保正则表达式匹配只在同一行上

输出:

Hi
预期输出(这是我真正想要的):


您可以将此正则表达式与
s
(DOTALL)正则表达式标志一起使用:

^.*?(?=yo\b[^\n]*cut me:)
在线演示:
yo\b[^\n]*cut me:
是一种前瞻模式,它确保具有单词边界的
yo
cut me:
在同一行中匹配。

删除
s
DOTALL
标志,并将正则表达式更改为以下内容:

^.*?((\yo\b.*?(cut me:)[\s\S]*))
启用
DOTALL
标志后,
将匹配换行符,因此您的匹配可以跨越多行,包括
yo
之前或
yo
剪切我之间的行。通过删除此标志,您可以确保仅将行与
yo
cut me
匹配,然后将结尾处的
*
更改为
[\s\s]*
,这将匹配任何字符,包括新行,以便您可以匹配字符串的结尾


编辑:请注意,这与另一个答案的方法略有不同,这将匹配您要删除的字符串部分,因此您可以用空字符串替换此部分以删除它。

使用
模式。多行
非常感谢……这就是我使用的是java模式objectcool……这基本上就是我想要实现的,因为一旦我匹配了该模式(匹配多余的内容)我在模式匹配上做了一个replaceall(多余的“”),这是多余的,基本上保持了上面的内容。。谢谢!
^.*?((\yo\b.*?(cut me:)[\s\S]*))