正则表达式结束

时间:2013-06-20 20:08:00

标签: regex

我在过去几个小时里搜索过网络,试图找出为什么我的同事坚持在他的正则表达式中使用(?!.)作为最后一个字符而不是通常的{{1} }。

我见过的一些正则表达式是$,它以通常的^.*.txt(?!.)开头,但不以^结尾。我一直无法找到任何明确或时间有效的理由,任何利弊或差异?

3 个答案:

答案 0 :(得分:4)

$ 可能匹配行尾而不是输入结尾(这取决于所使用的修饰符)。也许这就是原因。

在我看来,匹配输入的最佳方式是\z - 这意味着输入的结束,无论修饰符如何。大多数(如果不是全部)正则表达式实现都支持它。

答案 1 :(得分:3)

唯一可能的区别是多线

asdf$http://rubular.com/r/B2cNEL1pln

asdf(?!.)http://rubular.com/r/rbhKi1lKGI

答案 2 :(得分:2)

^.*\.txt(?!.)表示匹配(开始)(任何0次或更多次).txt,后面没有任何内容。

您可以获得有关?!模式here的更多信息。

如果你看here,它说使用m或s修饰符,你可以修改^和$的行为,以匹配行的开头或结尾,而不是整个字符串。还有一个ms。所以,我想使用(?!.),你可以匹配整个多行字符串的结尾。

所以,我不会说使用这个更好。相反,我会说你需要确切地知道你正在寻找什么或者你真正打算做什么,在单行字符串或多行字符串中以及你想如何解析你的输入以获得一行或者多行字符串,在进入正则表达式之前。

我认为我们中的许多人在单行字符串上运行regexp,因此两种语法之间没有区别。