Java正则表达式包含下划线

时间:2017-07-04 06:14:57

标签: java regex

我正在尝试使用下面的行,它会忽略下划线,但我想将其更改为包含下划线。

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” 请提供解决方案。

3 个答案:

答案 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]+)*\$

我在Regex Online

中执行此操作

如果名字可以包含数字:

\$[A-Za-z0-9]+(_[A-Za-z0-9]+)*\$

它适合我。

答案 2 :(得分:0)

如果你想捕获$和断言存在下划线之间的所有内容,请使用此正则表达式:

\\$(.*?)_([^_]*)\\$

(.*?)匹配一个符号,接下来它会尝试匹配下划线。如果没有,(.*?)匹配此符号,正则表达式尝试再次匹配下划线。

匹配下划线后,([^_]*)会匹配非下划线0次或更多次。