可能有一个非常简单的解释,但我现在还没有看到它...... 我有这个正则表达式:
(\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中打开它。
答案 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+
相比是一种限制性更强的模式。