我正在尝试使用下面的行,它会忽略下划线,但我想将其更改为包含下划线。
String name = "$SF_Update$";
String regexp = "\\$(.*?)(?:[\\_].*)?\\$"; // want to change this line
Pattern pattern = Pattern.compile(regexp);
Matcher matcher = pattern.matcher(name);
我尝试了以下选项:
String regexp ="\\$([a-zA-Z]+(?:_[a-zA-Z]+)*)\\$"
它包含下划线但它正在考虑下一行的字符串,它们最后也没有$,例如: “$ SF_Update $” “$ SF_Updateone” 请提供解决方案。
答案 0 :(得分:0)
代码:
String str1 = "$SF_Update$";
String str2 = "$SF_Update_One$";
String str3 = "$SF_Update_One";
Pattern pattern = Pattern.compile("\\$([^_]+_{1}[^_]+)\\$");
Matcher matcher1 = pattern.matcher(str1);
Matcher matcher2 = pattern.matcher(str2);
Matcher matcher3 = pattern.matcher(str3);
if (matcher1.matches())
System.out.println(str1 + " => " + matcher1.group(1));
else
System.out.println(str1 + " => " + "No Match.");
if (matcher2.matches())
System.out.println(str2 + " => " + matcher2.group(1));
else
System.out.println(str2 + " => " + "No Match.");
if (matcher3.matches())
System.out.println(str3 + " => " + matcher3.group(1));
else
System.out.println(str3 + " => " + "No Match.");
输出:
$SF_Update$ => SF_Update
$SF_Update_One$ => No Match.
$SF_Update_One => No Match.
答案 1 :(得分:0)
尝试使用此表达式:
\$[A-Za-z]+(_[A-Za-z]+)*\$
中执行此操作
如果名字可以包含数字:
\$[A-Za-z0-9]+(_[A-Za-z0-9]+)*\$
它适合我。
答案 2 :(得分:0)
如果你想捕获$和断言存在下划线之间的所有内容,请使用此正则表达式:
\\$(.*?)_([^_]*)\\$
(.*?)
匹配一个符号,接下来它会尝试匹配下划线。如果没有,(.*?)
匹配此符号,正则表达式尝试再次匹配下划线。
匹配下划线后,([^_]*)
会匹配非下划线0次或更多次。