正则表达式匹配直到第一个特定字符的实例

22

我正在尝试匹配一个URL直到特定字符,但是我使用的正则表达式在需要停止第一个实例后仍然匹配最后一个实例。我做错了什么?!

.+?(?=\")

匹配第一个"之前的所有内容。

然而我的结果如下:

enter image description here

1个回答

37
你在匹配规则的消耗部分添加了 ",请将其移除。
^.+?(?=\")

或者,如果您需要匹配包括换行符在内的任何字符,请使用以下方法之一:

(?s)^.+?(?=\")
^[\w\W]+?(?=\")

请查看演示。这里,^匹配字符串的开头,.+?匹配任意一个或多个字符,尽可能少地匹配到第一个",并将其排除在匹配之外,因为 "`" 是前瞻(零宽断言)的一部分。

在另外两个正则表达式中,(?s)使点号跨越多行匹配,[\w\W]是一个解决方案,如果不支持(s)(或其/s形式),则匹配任何字符。

最好使用否定字符类

^[^"]+

请查看另一个演示。在这里,^[^"]+匹配除"以外的1个或多个字符(参见[^"]+)从字符串的开头(^)开始。


我现在正在使用 PHP 代码进行命令行回显 - echo shell_exec("cat /tmp/urls | grep -Eo '^[^"]+'"); 但是我没有得到结果,有什么想法吗?我猜这是因为我没有在某个地方使用反斜杠,但我已经尝试了所有可能的方法。 - NeverPhased
1
grep -Eo '^[^"]+'应该从一行的开头提取字符串到第一个",并将其排除在匹配之外。请参见此演示 - Wiktor Stribiżew

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