正则表达式:按字符第一次出现的位置匹配

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

我这样写道:

/^(.*);/

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

815266 次浏览

尝试# EYZ0

谷歌regex character classes详细信息。

# EYZ0

[^;]表示匹配除分号以外的任何内容。方括号是一个集合匹配操作符,它本质上是,匹配这个字符集中的任何字符,开头的^使它成为逆匹配,所以匹配这个字符集中的任何

尝试# EYZ0

这是一个负的字符类

你需要

/^[^;]*/

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

^ (start of line anchor)被添加到正则表达式的开头,因此只捕获每行上的第一个匹配。这可能需要,也可能不需要,这取决于是否需要可能的后续匹配。

引用perlre手册页:

您可以通过在[]中包含一个字符列表来指定一个字符类,它将匹配列表中的任何字符。如果“"["”是"^",类匹配列表中没有的任何字符。

这应该适用于大多数正则表达式方言。

会;

/^(.*?);/

工作吗?

?是一个惰性操作符,所以正则表达式在匹配;之前抓取尽可能少的东西。

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

$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[^>]*>/

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

示例文本:

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

例如,如果我们有上面的示例文本,正则表达式/(.*?\;)/将给出第一次出现分号(;)之前的所有内容,包括分号:"this is a test sentence;"

"/^([^\/]*)\/$/"对我有用,只从数组中获得顶部“文件夹”,如:

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

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

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

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

祝你好运,希望有帮助。

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

/^([^;]*);*/
建议的答案对我来说是有效的。(例如在notepad++中) 但< / p >
^.*?(?=\;)

所做的。

我遇到了一个类似的问题,包括所有字符,直到单词entity_id后面的第一个逗号。Bigquery的解决方案是这样的:

SELECT regexp_extract(line_items,r'entity_id*[^,]*')

这适用于从一行开始到第一个单词的内容,

/^.*?([^\s]+)/gm