包含下划线的Java正则表达式
我尝试使用下面的一行,它忽略下划线,但我想将其更改为包含下划线包含下划线的Java正则表达式,java,regex,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-
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\U更新$”
“$SF_Updateone”
请提供解决方案。代码:
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.
尝试此表达式:
\$[A-Za-z]+(_[A-Za-z]+)*\$
我是在家里做的
如果名字可以有数字:
\$[A-Za-z0-9]+(_[A-Za-z0-9]+)*\$
它为我制定了规则。如果您想捕获$和断言下划线存在之间的所有内容,请使用以下正则表达式:
\\$(.*?)_([^_]*)\\$
(.*)
匹配一个符号,然后尝试匹配下划线。如果不匹配,(.*)
将匹配此符号,正则表达式将再次尝试匹配下划线
匹配下划线后,
([^\]*)
将所有非下划线的内容匹配0次或更多次。我认为从非捕获组中删除\\\$(.*)([\\].*))\\$
就足够了,如下所示:\\$([\\].*)您只是想捕获两个美元符号之间的所有内容,如\\\$([^$]+)\\$
?我想捕获$之间的所有内容,但只捕获第一个下划线。“$SF_更新$”;不应捕获“$SF_Update_one$”;请尝试“\\$([^ u$]+)\([^ u$]+)\$”
,[^ u$]+
与
以外的一个或多个字符匹配。如果里面没有任何空格,请将\\s
添加到[…]
(即“\\$([^\\\\\\\\\\$)\([^\\\\\\\\\\\\\\\\\\$”
)这是在捕获该字符串中的所有下划线,如何仅捕获第一个下划线,而不捕获连续的下划线,如:“$SF Update$”;不应捕获“$SF_Update_one$”;这个正则表达式不匹配$SF\u Update\u one$
抱歉,如果我把你弄糊涂了,我可能会这样问:matcher.group(1)应该只匹配(或选择)“$SF\u Upadate$,而不是$SF\u Update\u one$使用matcher.group(0)
若要获取所有与regexUsematcher.matches匹配的字符串,请执行以下操作。
若要检查此正则表达式是否匹配字符串“$SF\u Update\u One$`@user8059207,这没有帮助?很抱歉,我遇到了一些网络问题,无法登录。否,结果是只有SF被选为组(1),对于组(0),整个字符串被选中”$SF_Update$@user8059207预期的输出是什么?请指定一个或两个输入/输出组合。输入字符串=“$SF_Update$”和“$SF_Update_one$”,所需输出应显示在匹配器中。组(1)应仅为“SF_Update”,而不是SF_Update_one(只有第一个下划线应匹配).hey Chiranjib,这部分是正确的。第二个字符串$SF_Update_One$不应匹配,因为它有第二个下划线。