我正在寻找一种匹配所有内容的模式,直到第一次出现特定字符为止,例如“;” -分号。
我这样写:
/^(.*);/
但它实际上匹配所有内容(包括分号),直到最后一次出现分号。
你需要
/[^;]*/
[^;] 是一个字符类,匹配除分号之外的所有字符。
引用联机帮助页:
您可以通过 [] 列表创建一个类,它将匹配列表中的任何一个。 如果“[”之后的第一个是“^”,则该类不在列表中。
这适用于大多数正则表达式。
将要;
/^(.*?);/
工作?
? 是一个惰性运算符,因此正则表达式在匹配 ; 之前获得尽可能少的数据。
/^[^;]*/
[^;] 表示匹配除分号之外的任何内容。 方括号是集合匹配运算符,本质上它匹配该集合中的任何字符,开头的 ^ 使其成为反向匹配,因此匹配集合中不存在的任何字符。
尝试/[^;]*/
正则表达式了解详细信息。
尝试/[^;]*/
这是一个负面角色类别。
示例文本:
“这是一个测试;证明这个正则表达式;即下面的 g;”
例如,如果我们有上面的示例文本,正则表达式 /(.*?\;)/ 将为您提供所有内容,包括第一次出现分号 (;):“this is a test ;”
这不是正则表达式解决方案,但对于您的问题描述来说足够简单。 只需拆分字符串并获取数组中的第一项即可。
$str =“匹配直到第一个;等等;等等结束”;
$s = (";",$str,2);
打印 $s[0];
屈服
$ php 测试.php
匹配直到第一个
这对我非常有帮助,因为我正在尝试找出如何匹配 xml 标记(包括属性)中的所有字符。 我遇到了“一切都匹配到最后”的问题:
//
但这个问题可以通过以下方法解决:
/]*>/
看完这篇文章,谢谢大家
这只会匹配每个字符串中的第一次出现,后续匹配将被忽略。
/^([^;]*);*/
“/^([^\/]*)\/$/”为我工作,只从数组中获取顶部“文件夹”,如下所示:
一个/一个/b/
c/c/d/
/d/e/
F/
没有人能给你正确的答案,真是太遗憾了。
在正则表达式中,使其不贪婪。 默认情况下,正则表达式将尽可能匹配(贪婪)
就加一个吗? 它将是非贪婪的,并且匹配越少越好!
祝你好运,希望这能帮到你。