我正在寻找一个模式,匹配所有的东西,直到第一次出现一个特定的字符,说一个“;”-分号。

我这样写道:

/^(.*);/

但它实际上匹配所有内容(包括分号),直到最后出现一个分号。


当前回答

尝试/ [^;]* /

这是一个否定字符类。

其他回答

这不是一个正则表达式解决方案,而是对您的问题描述足够简单的解决方案。只需分割字符串并从数组中获取第一项。

$str = "match everything until first ; blah ; blah end ";
$s = explode(";",$str,2);
print $s[0];

输出

$ php test.php
match everything until first

这对我很有帮助,因为我试图弄清楚如何匹配xml标记中的所有字符,包括属性。我遇到了“将所有内容匹配到最后”的问题:

/<simpleChoice.*>/

但能够解决这个问题:

/<simpleChoice[^>]*>/

读完这篇文章后。谢谢所有。

这将只匹配每个字符串中的第一个出现,并忽略后续出现。

/^([^;]*);*/

会;

/^(.*?);/

工作吗?

的吗?是惰性操作符,因此正则表达式在匹配;之前抓取尽可能少的内容。

真的有点难过,没有人给你正确的答案....

在正则表达式中,?使它非贪婪。默认情况下,regex将尽可能多地匹配(贪婪)

简单地加一个?并且它将是非贪婪的,匹配越少越好!

祝你好运,希望有帮助。