我有一个如下所示的正则表达式:
"\\t'AUR +(username) .*? /ROLE=\"(my_role)\".*$"
用户名和 my_role 部分将从args中提供。所以它们总是在脚本启动时改变。那么我如何为正则表达式的那部分提供参数呢?
感谢您的帮助。
答案 0 :(得分:1)
像这样定义正则表达式:
String fmt = "\\t'AUR +(%s) .*? /ROLE=\"(%s)\".*$";
// assuming userName and myRole are your arguments
String regex = String.format(fmt, userName, myRole);
答案 1 :(得分:1)
您应该使用Pattern.quote
转义动态字符串中的特殊字符。要将正则表达式部分放在一起,您可以简单地使用字符串连接:
String quotedUsername = Pattern.quote(username);
String quotedRole = Pattern.quote(my_role);
String regexString = "\\t'AUR +(" + quotedUsername +
") .*? /ROLE=\"(" + quotedRole + ")\".*$";
我认为在使用String.format
时将正则表达式与格式字符串混合可能会使正则表达式更难理解。
答案 2 :(得分:0)
使用字符串格式或直接字符串连接来构造正则表达式,然后再将其传递给编译...
答案 3 :(得分:0)
试试这个例子:
String patternString = "\\t'AUR +(%s) .*? /ROLE=\"(%s)\".*$";
String formatted = String.format(patternString, username,my_role);
System.out.println(formatted);
Pattern pattern = Pattern.compile(patternString);
您可以在此处运行一个有效的示例:http://ideone.com/93YeNg