正则expression式:匹配一个字符的第一个匹配项

我正在寻找一个匹配所有事物的模式, 直到第一次出现特定的人物,比如“;” – 分号

我写了这个:

/^(.*);/ 

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

你需要

 /[^;]*/ 

[^;]是一个字符类 ,它匹配除分号之外的所有内容。

引用perlre manpage:

您可以通过在[]中包含一个字符列表来指定一个字符类,它将与列表中的任何字符匹配。 如果“[”后面的第一个字符是“^”,则该类匹配不在列表中的任何字符。

这应该适用于大多数正则expression式。

将;

 /^(.*?);/ 

工作?

“?” 是一个懒惰的运算符,所以正则expression式匹配之前尽可能less的抓取。

/^[^;]*/

[^;]表示匹配除分号以外的任何内容。 方括号是一个匹配的运算符,它本质上是匹配这组字符中的任何字符, ^在开始时使它成为一个反匹配,所以匹配任何不在这个集合中的东西。

尝试/[^;]*/

谷歌regex character classes的细节。

尝试/[^;]*/

这是一个否定的字符类 。

这不是一个正则expression式的解决scheme,但足够简单的问题描述。 只需拆分你的string,并从你的数组中获得第一个项目。

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

产量

 $ php test.php match everything until first 

示例文本:

 "this is a test sentence; to prove this regex; that is g;iven below" 

例如,如果我们有上面的示例文本,则正则expression式/(.*?\;)/会给出所有的东西,直到第一次出现分号( ; ),包括分号: "this is a test sentence;"

这对我非常有帮助,因为我试图找出如何匹配包含属性的XML标记中的所有字符。 我遇到了“匹配所有到最后”的问题:

 /<simpleChoice.*>/ 

但能够解决这个问题:

 /<simpleChoice[^>]*>/ 

看完这篇文章后。 谢谢大家。

"/^([^\/]*)\/$/"为我工作,只能从一个数组中获得顶级“文件夹”,如:

 a/ <- this a/b/ c/ <- this c/d/ /d/e/ f/ <- this 

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

在正则expression式中,? 使它不贪心。 默认情况下,正则expression式会匹配尽可能多(贪婪)

只需添加一个? 它将是非贪婪的,尽可能less匹配!

祝你好运,希望有所帮助。

这将匹配到仅在每个string中的第一次出现,并且将忽略随后出现的事件。

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