Regex 正则表达式:匹配到字符的第一个匹配项

Regex 正则表达式:匹配到字符的第一个匹配项,regex,Regex,我正在寻找一种模式,它匹配所有字符,直到某个特定字符第一次出现,比如“;”-a分号 我写道: /^(.*);/ 但它实际上匹配所有内容(包括分号),直到最后出现分号。尝试/[^;]*/ 谷歌regex字符类获取详细信息。/^[^;]*/ [^;]表示匹配除分号以外的任何内容。方括号是一个集合匹配运算符,它本质上是匹配这组字符中的任何字符,开始处的^使其成为反向匹配,因此匹配不在此集合中的任何字符。尝试/[^;]*/ 那是否定的。你需要 /[^;]*/ [^;]是一个字符类,它匹配除分号以外的

我正在寻找一种模式,它匹配所有字符,直到某个特定字符第一次出现,比如“;”-a分号

我写道:

/^(.*);/

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

尝试
/[^;]*/

谷歌
regex字符类
获取详细信息。

/^[^;]*/


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

尝试
/[^;]*/

那是否定的。

你需要

/[^;]*/
[^;]
是一个字符类,它匹配除分号以外的所有字符

要引用手册页:

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

这应该适用于大多数regex方言

/^(.*?);/
工作


是一个惰性运算符,因此正则表达式在匹配

之前获取的数据量尽可能少。这不是正则表达式解决方案,但对于问题描述来说非常简单。只需拆分字符串并从数组中获取第一项即可

$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"
例如,如果我们有上面的示例文本,正则表达式将为您提供一切,直到分号(
)第一次出现为止,包括分号:
“这是一个测试句子;”
“/^([^\/]*)\/$/”
,以从数组中仅获取顶级“文件夹”,如:

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

a/真的有点遗憾,没有人给你正确的答案

在正则表达式中?让它不贪婪。默认情况下,正则表达式将尽可能匹配(贪婪)

只需添加一个?它将是非贪婪的,并且尽可能少地匹配


祝你好运,希望有帮助。

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

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

建议的答案中没有一个对我有效。(例如,在记事本++中) 但是


没有。

/^(.*)/
也应该起作用(称为非贪婪),但是使用
[^;]*
给出的答案更好。您如何选择分号之后的所有内容,而不是分号本身。请参见此操作
\w+(?!([^]+;)|)
,但这不是为什么
+(?!([^]+)|)
Pascal,你应该把它写下来作为答案!是的,但是在Tim Toady的碳酸氢盐扩展之后,我相信否定字符类会赢,因为懒惰量词包括回溯+1.无论如何,性能主题值得一读:请注意,此答案中的第一个“^”赋予正则表达式完全不同的含义:它使正则表达式只查找从字符串开头开始的匹配项。在这种情况下,如果只运行一次正则表达式,那么这实际上是一个no-op。如果要在单个字符串中查找多个匹配项,则必须先查找第一个“^”。他确实说过要在第一次出现分号之前匹配所有匹配项,因此我假设他的意思是从字符串的开头开始。我发现,实际解析更有效(每种语言或框架都有自己的类)html/xml由于其机器格式,正则表达式用于natural language.Nice。我用它来修复
标记中出现语法错误的xml文档。因为解析器无法处理它。不必转义
字符,因为它不是正则表达式的特殊字符。分组
()
也不是必需的。你可以选择
/.*?;/
是的,你说得很对。转义更像是“安全总比抱歉好”这是我一直在寻找的答案。所以?使匹配在第一次出现时结束?这是什么名字…(让我们称它为)regex?@Parziphal的属性
字符使匹配延迟(匹配次数尽可能少)。想想regex匹配字符直到第一个分号,然后它就不会再继续了,因为它放弃了(lazy;)这在很大程度上取决于实际的正则表达式实现,并不是每个实现都有非贪婪模式;baz=bax;bab=baf
,即使没有
,它也匹配
bab=baf
正是我需要的。不知道为什么它会工作,但如果规范说匹配的一切,但目标符号。。。
^.*?(?=\;)