使用正则表达式匹配包含特定字符串的行

37

我试图创建一个正则表达式,它可以选择包含匹配字符串的整行。

我似乎无法让它工作。这是表达式:

^.*?(\bEventname 2\b).*$

你可以在这里查看测试用例和我尝试过的内容:

https://www.regex101.com/r/mT5rZ3/1


2
.*Eventname 2.* 是什么情况? - m0skit0
你忘记加上m修饰符了。https://www.regex101.com/r/mT5rZ3/2 - Avinash Raj
@AvinashRaj 如果OP只想匹配单行,为什么要添加多行修饰符? - m0skit0
@AvinashRaj 我在regex101上看到它可以工作,但在我的软件(uBot Studio)中却不行。我认为我不能在那里使用m修饰符,但还是谢谢你的尝试 :-) - Dyvel
实际上,我通过首先过滤搜索字符串以仅使用括号中的代码(因为它是唯一的并使匹配更容易)来使您的解决方案@m0skit0起作用...谢谢! - Dyvel
5个回答

47

以下是我的使用方式,对我来说完美运作。

^.*substring.*$

29

这个答案只需进行463个步骤而不是952个步骤就可以解决问题。只需确保文件末尾有一个新行。

.*Eventname 2.*\n

https://www.regex101.com/r/mT5rZ3/5

2022年4月9日编辑

使用.*Eventname 2.*\n?也可以在463步骤内解决,但是无需确保文件末尾有一个新行。


7

试试这个:

(.*(?:Eventname 2).*)

解释:

( ... ):分组并捕获行

(?:...):分组而不捕获行所需包含的字符串

.*:任何字符


7
如果你使用PHP正则表达式,不要匹配换行符。因此:
.*(\bEventname 2\b).*

如果 . 匹配换行符,您需要使用 *? 使点不贪婪(这样它只匹配一行,而不是所有内容)。您还需要处于多行模式才能使用 ^ 和 $,但这应该不必要(因为您只想匹配一行)。


我的搜索字符串将是:Eventname 2(T104)-似乎无法像那样工作...? - Dyvel
.(Eventname 2 (T104)). - Astrogat

2
您正在使用包含多行的字符串。默认情况下,^ 和 $ 运算符将匹配整个字符串的开头和结尾。m 修饰符将导致它们匹配一行的开头和结尾。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接