非贪婪的比赛贪心?

时间:2017-05-05 22:36:10

标签: regex

可能有一个非常简单的解释,但我现在还没有看到它...... 我有这个正则表达式:

(\s.+?\sstress)

我想要它匹配像[SPACE]some word[SPACE]stress这样的东西。但是它很匹配:

This will cause a lot of work stress 

将匹配:will cause a lot of work stress.+?应该是非贪婪的,所以我希望它只匹配work stress
点击here在regex101中打开它。

1 个答案:

答案 0 :(得分:2)

public class Solution{ int helper(int[][] table, int i, int j) { if ( i < 0 || j < 0 || i >= 4 || j >= 4 ) return 0; if ( table[i][j] == 1 ) return 0; if ( i == 3 && j == 3 ) return 1; table[i][j] = 1; return helper(table, i, j+1) + helper(table, i+1, j) + helper(table, i, j-1) + helper(table, i-1, j); } public static void main(String[] args){ int[][] table=new int[4][4]; for(int i=0; i<4; i++) for(int j=0; j<4; j++) table[i][j]=0; System.out.println(new Solution().helper(table,0,0)); } } 非贪婪,但正则表达式引擎从左到右工作,第一个.*?匹配最左边的空格,\s可以匹配任何字符,因此,虽然它是懒惰量化的,但它必须到达后跟.子串的空白。

要获得stress,请使用

work stress

或只是

\s(\S+\sstress)

请参阅regex demo

这里要强调的是排除正则表达式中第一个\S+\s+stress 和第二个\s之间的空格匹配。 \s匹配一个或多个非空白符号,与\S+相比是一种限制性更强的模式。