正则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中的第一次出现,并且将忽略随后出现的事件。
/^([^;]*);*/