Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 我的正则表达式匹配得太多了。我怎样才能让它停止?_Regex - Fatal编程技术网

Regex 我的正则表达式匹配得太多了。我怎样才能让它停止?

Regex 我的正则表达式匹配得太多了。我怎样才能让它停止?,regex,Regex,我有一根巨大丑陋的绳子: J0000000:事务A0001401于2008年8月22日上午9:49:29开始 J0000010:项目名称:E:\foo.pf J0000011:作业名称:MBiek直接邮件测试 J0000020:文件1-已成功完成 我试图用正则表达式从中提取片段。在这种情况下,我想抓住项目名称之后的所有内容,直到它显示J0000011:(11每次都是不同的数字) 这是我一直在玩的正则表达式: 项目名称:\s+(.*)\s+J[0-9]{7}: 问题是它直到最后到达j00002

我有一根巨大丑陋的绳子:

J0000000:事务A0001401于2008年8月22日上午9:49:29开始
J0000010:项目名称:E:\foo.pf
J0000011:作业名称:MBiek直接邮件测试
J0000020:文件1-已成功完成
我试图用正则表达式从中提取片段。在这种情况下,我想抓住
项目名称
之后的所有内容,直到它显示
J0000011:
(11每次都是不同的数字)

这是我一直在玩的正则表达式:

项目名称:\s+(.*)\s+J[0-9]{7}:
问题是它直到最后到达j000020:时才会停止


如何使正则表达式在第一次出现
J[0-9]{7}

时停止,在其后面添加“
”,使
*
非贪婪:

Project name:\s+(.*?)\s+J[0-9]{7}:

在这里使用非贪婪量词可能是最好的解决方案,也因为它比贪婪的方法更有效:贪婪匹配通常尽可能地(在这里,直到文本结尾!),然后一个字符接着一个字符地追溯,尝试匹配后面的部分

但是,考虑使用否定字符类代替:

Project name:\s+(\S*)\s+J[0-9]{7}:

\S
的意思是“除了空格之外的所有内容,这正是您想要的。

我还建议您使用“Expresso”来尝试正则表达式-这是一个非常好的(免费)实用程序,用于正则表达式编辑和测试

它的一个好处是,它的UI公开了许多未使用正则表达式的人可能不熟悉的正则表达式功能,这样他们就可以很容易地了解这些新概念

例如,当使用UI构建正则表达式并选择“*”时,您可以选中复选框“尽可能少”,查看结果正则表达式,并测试其行为,即使您以前不熟悉非贪婪表达式

可从其网站下载:

快速下载:

好吧,
“*”
是一个贪婪的选择器。您可以通过使用
“*?”
使其非贪婪。当使用后一个构造时,正则表达式引擎将在每一步将文本匹配到
中,尝试匹配
”*?“
之后的任何make。这意味着,例如,如果
之后没有任何make出现
,则不匹配任何内容

以下是我使用的。
s
包含原始字符串。此代码特定于.NET,但大多数风格的正则表达式都有类似的内容

string m = Regex.Match(s, @"Project name: (?<name>.*?) J\d+").Groups["name"].Value;
string m=Regex.Match(s,@“项目名称:(?*)J\d+”)。组[“名称]。值;
(项目名称:\s+[A-Z]:(?:\\w+.[A-zA-Z]+\s+J[0-9]{7})(?=:)

这对你有用


添加(?:\\w++。[a-zA-Z]+将更具限制性,而不是。*

在可能的情况下,添加贪婪的负数(或正数)字符类通常比懒惰的量词表现得更好。懒惰要求引擎按字符向前跟踪字符,检查每次跟随的模式直到匹配;贪婪的字符类可以无意识地重复所需的字符,这可能会快很多。因此,你可以考虑制作一个STRO。这是一个负字符类的例子,因为这是贪婪与懒惰的规范。已经有一些很棒的网站。我宁愿访问书签也不愿在我的计算机上有另一个程序。项目名称:[^\n]*\n(J[0-9]{7})