我正在寻找一个匹配所有内容的模式,直到第一次出现特定字符,比如";" - 分号.
我写了这个:
/^(.*);/
Run Code Online (Sandbox Code Playgroud)
但它实际上匹配所有内容(包括分号),直到最后一次出现分号.
sle*_*ske 455
你需要
/[^;]*/
Run Code Online (Sandbox Code Playgroud)
这[^;]是一个字符类,它匹配除了分号之外的所有内容.
引用手册perlre页:
您可以通过在[]中包含一个字符列表来指定一个字符类,该列表将匹配列表中的任何字符.如果"["之后的第一个字符是"^",则该类匹配列表中不存在的任何字符.
这适用于大多数正则表达式方言.
RJF*_*ner 277
将;
/^(.*?);/
Run Code Online (Sandbox Code Playgroud)
工作?
这?是一个懒惰的运算符,因此正则表达式在匹配之前尽可能少地抓取;.
Gle*_*ven 34
/^[^;]*/
[^;]表示匹配除分号之外的任何内容.方括号是一个集匹配运算符,它本质上匹配这组字符中的任何字符^,一开始使它成为一个反向匹配,所以匹配不在此集合中的任何东西.
这对我非常有帮助,因为我试图弄清楚如何匹配 xml 标记中的所有字符,包括属性。我遇到了“将所有内容匹配到最后”的问题:
/<simpleChoice.*>/
Run Code Online (Sandbox Code Playgroud)
但能够通过以下方式解决问题:
/<simpleChoice[^>]*>/
Run Code Online (Sandbox Code Playgroud)
看完这篇文章后。谢谢大家。
小智 7
示范文本:
"this is a test sentence; to prove this regex; that is g;iven below"
Run Code Online (Sandbox Code Playgroud)
例如,如果我们有上面的示例文本,正则表达式/(.*?\;)/将为您提供所有内容,直到第一次出现分号(;),包括分号:"this is a test sentence;"
这不是一个正则表达式解决方案,但对于您的问题描述来说足够简单.只需拆分你的字符串并从数组中获取第一项.
$str = "match everything until first ; blah ; blah end ";
$s = explode(";",$str,2);
print $s[0];
Run Code Online (Sandbox Code Playgroud)
产量
$ php test.php
match everything until first
Run Code Online (Sandbox Code Playgroud)