7

在过去的几个小时里,我浏览了网络,试图弄清楚为什么我的一位同事坚持(?!.)在他的正则表达式中使用作为最后一个字符而不是通常的$.

我见过的一些正则表达式^.*.txt(?!.)以通常的开头^,但不以$. 我还没有找到任何明确的或省时的原因,任何利弊或差异?

4

3 回答 3

4

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

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

于 2013-06-20T20:20:00.547 回答
3

唯一可能的区别是多行

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

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

于 2013-06-20T20:19:56.410 回答
2

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

您可以在此处?!获取有关该模式的更多信息。

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

所以,我不会说使用它更好。相反,我会说您需要确切地知道在单行字符串或多行字符串中您正在寻找什么或您实际打算做什么,以及您希望如何解析输入以获得单行或多行字符串,在传递到正则表达式之前。

我认为我们中的许多人在单行字符串上运行正则表达式,因此感觉这两种语法之间没有区别。

于 2013-06-20T20:13:31.120 回答