Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.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
Java %etd(msg01)正则表达式?_Java_Regex - Fatal编程技术网

Java %etd(msg01)正则表达式?

Java %etd(msg01)正则表达式?,java,regex,Java,Regex,我正在尝试为类似%etd(msg01)的字符串编写正则表达式 它打印%etd(msg01)和%etd(msg02)。但是,我希望它单独打印%etd(msg01)%etd(msg02)。我的意思是我在寻找非贪婪的对手 在这种情况下,应该如何更改正则表达式以使其不贪婪?您应该使用以下正则表达式: Pattern pattern = Pattern.compile("%etd\\([^)]+\\)"); 您应该使用以下正则表达式: Pattern pattern = Pattern.compile(

我正在尝试为类似
%etd(msg01)
的字符串编写正则表达式

它打印
%etd(msg01)和%etd(msg02)
。但是,我希望它单独打印
%etd(msg01)
%etd(msg02)
。我的意思是我在寻找非贪婪的对手


在这种情况下,应该如何更改正则表达式以使其不贪婪?

您应该使用以下正则表达式:

Pattern pattern = Pattern.compile("%etd\\([^)]+\\)");

您应该使用以下正则表达式:

Pattern pattern = Pattern.compile("%etd\\([^)]+\\)");

您应该使用以下正则表达式:

Pattern pattern = Pattern.compile("%etd\\([^)]+\\)");

您应该使用以下正则表达式:

Pattern pattern = Pattern.compile("%etd\\([^)]+\\)");

请在.*或.+后加一个问号,使其不生硬。这应该对你有用

Pattern=Pattern.compile(“%etd\\(.+?\\)”)

双斜杠在开括号和闭括号前面也是必要的,因为它们在正则表达式中具有特殊的含义

另一种使用方法是,如果你确定你的名字在第一个后没有包含一个开放的偏执狂,则如下所示


Pattern=Pattern.compile(“%etd\\([^(]+\\)”);

请在.*或.+后面加一个问号,使其不僵硬。这对您应该有用

Pattern=Pattern.compile(“%etd\\(.+?\\)”);

双斜杠在开括号和闭括号前面也是必要的,因为它们在正则表达式中具有特殊的含义

另一种使用方法是,如果你确定你的名字在第一个后没有包含一个开放的偏执狂,则如下所示


Pattern=Pattern.compile(“%etd\\([^(]+\\)”);

请在.*或.+后面加一个问号,使其不僵硬。这对您应该有用

Pattern=Pattern.compile(“%etd\\(.+?\\)”);

双斜杠在开括号和闭括号前面也是必要的,因为它们在正则表达式中具有特殊的含义

另一种使用方法是,如果你确定你的名字在第一个后没有包含一个开放的偏执狂,则如下所示


Pattern=Pattern.compile(“%etd\\([^(]+\\)”);

请在.*或.+后面加一个问号,使其不僵硬。这对您应该有用

Pattern=Pattern.compile(“%etd\\(.+?\\)”);

双斜杠在开括号和闭括号前面也是必要的,因为它们在正则表达式中具有特殊的含义

另一种使用方法是,如果你确定你的名字在第一个后没有包含一个开放的偏执狂,则如下所示



Pattern=Pattern.compile(“%etd\\([^(]+\\)”);

如果你知道你在寻找一个非贪婪的匹配,为什么你没有编写一个使用该匹配的正则表达式?@user1661951你尝试过给定的解决方案吗?如果你知道你在寻找一个非贪婪的匹配,为什么你没有编写一个使用该匹配的正则表达式?@user1661951你尝试过给定的解决方案吗?如果你知道你在寻找一个否n-贪婪匹配,为什么你没有编写一个使用一个的正则表达式?@user1661951你有没有尝试过给定的解决方案?如果你知道你在寻找一个非贪婪匹配,为什么你没有编写一个使用一个的正则表达式?@user1661951你有没有尝试过给定的解决方案?@MarkoTopolnik:我有点惊讶你提出了这个建议。我在regex被认为比使用
*?
+?
更好、更高效,我几乎不相信效率上的差异会在这里变得明显,简单性本身就是一个特点。在有意义的地方应用最佳实践……或者,如果你提出了一个不明显的解决方案,包括为什么OP应该使用你的ve的论证rsion.“被认为更好”不是什么论据,“被认为有效”甚至没有意义。它要么更有效,要么不更有效。对一个人来说不明显的东西对另一个人来说可能更明显。@Marko Topolnik-请阅读::
/\([^()]*\)/
的表达肯定比
/\(.?\)更有效/
在每种语言中,Perl除外(Perl的正则表达式引擎针对惰性点星表达式进行了高度优化)。表达式
*?
必须在每个字符位置“颠簸”时停止并回溯一次,而应用于否定字符类表达式的贪婪量词可以在一个步骤中消耗整个区块,而无需回溯。@MarkoTopolnik:我有点惊讶你提出了这个建议。在正则表达式中使用IMO否定被认为比使用
*?
+?
更好、更有效。我几乎不相信di在这里,效率上的差异将变得明显,简单性本身就是一个特点。在有意义的地方应用最佳实践……或者,如果你提出了一个不明显的解决方案,包括为什么OP应该使用你的版本的论证。“被认为更好”不是一个很大的论据,“被认为有效”甚至没有意义。它要么更有效,要么不更有效。对一个人来说不明显的东西对另一个人来说可能是显而易见的。@Marko Topolnik-请阅读:。表达式:
/\([^()]*\)/
在除Perl之外的所有语言中肯定比
/\(.?\)/
更有效(其正则表达式引擎针对惰性点星表达式进行了高度优化。)表达式
*?
必须在每个字符位置“颠簸前进”时停止并回溯一次,而应用于否定字符类表达式的贪婪量词可以在一个步骤中消耗整个区块,而无需回溯。@MarkoTopolnik:我有点惊讶你提出了这个建议。在正则表达式中使用IMO否定被认为比使用
*?
+?
更好、更有效。我几乎不相信di在这里,效率上的差异将变得明显,简单性本身就是一个特征。在有意义的地方应用最佳实践……或者,如果你提出了一个不明显的解决方案,包括为什么OP应该使用你的版本的论证。“认为更好”不是一个很大的论据,并且