java match正则不生效_当使用Java正则表达式模式.MatCH()时,源不匹配正则表达式,但是,我的结果是,源匹配正则表达式...

当使用Java正则表达式模式.MatCH()时,源不匹配正则表达式,但是,我的结果是,源匹配正则表达式。

String source ="ONE.TWO"

String regex ="^ONE\\.TWO\\..*"

import java.util.regex.Pattern;

public class Test {

public static void main(String[] args) {

test();

}

public static void test() {

Test stringDemo = new Test();

stringDemo.testMatcher();

}

public void testMatcher() {

String source ="ONE.TWO";

String regex ="^ONE\\.TWo\\..*";

// The result = false,"not match". But, the hope result is true,"match"

matcher(source, regex);

}

public void matcher(String source, String regex) {

Pattern pattern = Pattern.compile(regex);

boolean match = pattern.matcher(source).matches();

if (match) {

System.out.println("match");

} else {

System.out.println("not match");

}

}

}

为什么你的希望是"真的"?^^因为它不能工作有很多原因,更容易的是"w"与"w"不匹配。

嗯,它不匹配有两个原因:

您的regex "^ONE\\.TWo\\..*"不区分大小写,所以您希望TWO如何匹配TWO。

而且regex在结尾处需要一个.字符,而字符串"ONE.TWO"没有该字符。

使用以下regex来匹配源字符串:

String regex ="^ONE\\.TWO\\.*.*";

我不能修改String regex ="^ONE\\.TWO\\..*",因为它是对一个api请求的响应。不过,还是要谢谢你。

@维琪,所以你需要调整正则表达式来匹配它。

对。regex list是API响应。这个regex列表对大多数数据都很有用。只有两个regex不有用。我必须为特殊情况编写额外的自定义regex。

在代码中,正则表达式希望TWO中的o为小写,并希望后跟.。

尝试:

String source ="ONE.TWo.";

这将匹配问题中编码的正则表达式。

表达式\.表示匹配一个文本点(而不是任何字符)。当你把它编码成Java字符串时,你必须用另一个反斜杠来避开反斜杠,因此它变成EDCOX1×4。

表达式末尾的.*表示"匹配任何字符的零或多个(换行符除外)"。

所以这也符合:

String source ="ONE.TWo.blah blah";

它对我有用。谢谢,我不能修改String regex ="^ONE\\.TWO\\..*",因为它是对一个api请求的响应。但我可以修改我的使用source:boolean match = pattern.matcher(source).matches() || pattern.matcher(source +".").matches();。

你的正则表达式有点不正确。这里有一个额外的点:

String regex ="^ONE\.TWO\.(extra dot).*"

试试这个,不带圆点:

String regex ="^ONE\.TWO.*"

我不能修改String regex ="^ONE\\.TWO\\..*",因为它是对一个api请求的响应。不过,还是要谢谢你。

默认情况下,模式匹配区分大小写。在您的案例中,source有一个大写的o,regex有一个小写的o。

所以你必须添加Pattern.CASE_INSENSITIVE或改变o的情况。

Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE );

String regex ="^ONE\\.TWO\\..*";

我不能修改String regex ="^ONE\\.TWO\\..*",因为它是对一个api请求的响应。不过,还是要谢谢你。

String regex ="^ONE\\.TWO\\..*"

regex中的双斜线\\是转义序列,以匹配源字符串中的单斜线\。

末尾的.*与除换行符以外的任何字符0 or More times匹配。

为了匹配regex,您的源代码应该是

String source ="ONE\.TWO\three blah @#$ etc" OR

String source ="ONE\.TWO\.123@#$ etc"

基本上,它是以一个.2开头,没有换行符的任何字符串。

对于Java,反斜杠必须一次逃脱,最后一次用于ReGEXP引擎(如果需要匹配一个点,例如EDCOX1(6))。EDCOX1(7)是一个无效的Java字符串。此代码无法编译。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值