char comando[4];
使用命令
运行时的上述代码public class MainTest {
public static void main( String ... args ) {
Pattern p = Pattern.compile(args[0]);
Matcher m = p.matcher(args[1]);
while ( m.find() )
System.out.print(m.start()+" ");
System.out.println();
}
}
产量
java MainTest "\b" "^23 *$76 bc"
java MainTest "\B" "^23 *$76 bc"
java MainTest "\S" "^23 *$76 bc"
java MainTest "\W" "^23 *$76 bc"
虽然我几乎确定它会
1 3 5 6 7 9
0 2 4 8
0 1 2 4 5 7 8
0 3 4 6
好的,1 3 6 8 9 11
0 2 4 5 7 10
0 1 2 4 5 6 7 9 10
0 3 4 5 8
表示\w
,[0-9A-Za-z_]
应与\b
和\w
边界匹配,\W
应与空格匹配不在\W
下划线的东西。那么,为什么我得到这些结果呢?我来到这里是为了解释我对Java中正则表达式的一些严重误解。
答案 0 :(得分:1)
@Andreas是对的。问题出在Linux shell中:$ 7被替换为空,命令行参数变为" ^ 23 * 6 bc"。
答案 1 :(得分:0)
我在Linux和Windows上执行了相同的程序。 我发现,Linux shell在符号 $ 之后替换了 double 引用的参数 与他们的价值观(在你的情况下,如安德烈亚斯所解释的那样)。 以下是适用于两种操作系统的示例代码
System.out.println("0:"+args[0]);
System.out.println("1:"+args[1]);
Pattern p = Pattern.compile(args[0]);
Matcher m = p.matcher(args[1]);
while ( m.find() )
System.out.print(m.start()+" ");
System.out.println();
并使用单引号参数执行
java MainTest '\b' '^23 *$76 bc'
java MainTest '\B' '^23 *$76 bc'
java MainTest '\S' '^23 *$76 bc'
java MainTest '\W' '^23 *$76 bc'