Java如何用正则表达式匹配字符串中的 ‘\‘

Java如何用正则表达式匹配字符串中的 '\'

背景

今天运营反馈一个问题,自己扫描的单词记录看不到,看了下日志显示同步的英语不符合要求,限制了符合以下正则表达式的句子才会入库:

String regex = "^[A-Za-z0-9\s,.!?:]+$";

稍微解释下:

  • ^表示匹配字符串的开头;
  • [A-Za-z0-9\s,.!?:]表示匹配一个英文字母(大写或小写)、数字、空格、逗号、句号、感叹号、问号、或冒号中的任意一个字符;
  • +表示匹配前面的子表达式一次或多次;
  • $表示匹配字符串的结尾。

但是这次同步上来的句子是下面这个,里面竟然包含反斜杠,然而运营又希望能支持,只能照改了~

{"7.pub :They went to the pub .\b8.circle :Make a circle ."}

正题

在Java中,由于反斜杠字符 \ 在正则表达式中具有特殊含义,因此在使用正则表达式匹配字符串中的 \ 时,需要使用双反斜杠 \\ 来表示一个反斜杠字符。这是因为在 Java 中,反斜杠字符本身也是一个转义字符,因此需要使用两个反斜杠来表示一个反斜杠字符。

当轻描淡写加了个 \\ 以为就能解决问题时,一测试发现还是没匹配到。

String regex = "^[A-Za-z0-9\s,.!?\\:]+$";

想了下突然意识到,当打印日志显示的是 \b8 时,其实传的数据应该是 \\b8 才对。

<span data-type=\展示问题" />

所有要匹配两个反斜杠 \\ 需要写四个反斜杠 \\\\ 才可以~修改后测试果然通过。

下面演示如何使用正则表达式匹配字符串中的 \

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String input = "This is a backslash \\ test";
        String pattern = "\\\\"; // 匹配一个反斜杠字符

        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(input);

        while (m.find()) {
            System.out.println("Found match at index " + m.start());
        }
    }
}
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java使用正则表达式匹配字符串可以使用java.util.regex包的类实现。以下是一个基本的示例: ``` import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExample { public static void main(String[] args) { String input = "Hello, World!"; String patternString = "Hello"; Pattern pattern = Pattern.compile(patternString); Matcher matcher = pattern.matcher(input); if (matcher.find()) { System.out.println("Match found!"); } else { System.out.println("Match not found."); } } } ``` 在上面的示例,我们首先定义了一个字符串input和一个正则表达式patternString。然后,我们使用Pattern类的compile方法将正则表达式编译成一个模式。接着,我们使用Matcher类的matcher方法创建一个Matcher对象,该对象可以应用正则表达式模式来搜索输入字符串。最后,我们使用Matcher对象的find方法来查找匹配项。 还可以使用正则表达式来替换字符串的文本。以下是一个示例: ``` import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExample { public static void main(String[] args) { String input = "Hello, World!"; String patternString = "World"; String replaceString = "Universe"; Pattern pattern = Pattern.compile(patternString); Matcher matcher = pattern.matcher(input); String output = matcher.replaceAll(replaceString); System.out.println(output); } } ``` 在上面的示例,我们定义了一个字符串input、一个正则表达式patternString和一个替换字符串replaceString。然后,我们使用Pattern类的compile方法将正则表达式编译成一个模式。接着,我们使用Matcher类的matcher方法创建一个Matcher对象,该对象可以应用正则表达式模式来搜索输入字符串。最后,我们使用Matcher对象的replaceAll方法将匹配项替换为指定的字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CoderJia_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值