求教正则表达式如何匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求教正则表达式如何匹配相关的知识,希望对你有一定的参考价值。

文本是:

最困难的部分,已基本完成,但我要一直关注。\NThe hardest part is mostly done,but I best keep my eye on it.

需要用正则表达式匹配硬换行符号\N前的中文里所有标点符号。
正则表达式如何处理?

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
1.当模式第二位是*时,且第一位字符匹配,分三种匹配模式:
1.把*当做0,就是忽略掉前两位X*,继续做匹配;
2.把*当做是1,字符串后移一位,模式后移两位跳过这个*,继续匹配;
3.把*当做>1,即可能字符串的下一位与上一位相同,所以做匹配。如果不匹配,模式后移两位。
2.当模式第二位不是*时,如果第一位匹配则全部后移一位进行匹配,否则直接返回false。
参考技术A

按照你的要求编写的程序如下(见图)

追问

这个是字幕文稿中的一句,我只是想在notepad++里找出所有中文的标点,替换为空格,不是 想要Java编程找出这些标点。

追答

参考技术B 你用什么正则表达式,各类引擎的正则表达式略有不同,我使用的Boost Regex。
[\W](?=.*?\\N)

正则表达式如何获取匹配的部分

String str = "sdfqweid=icmp_77733329&234123";
Pattern pattern = Pattern.compile("\\d8");
Matcher matcher = pattern.matcher(str);
String tempStr = matcher.group(1);
System.out.println(tempStr);
为什么不行呢,我想获取77733329

首先你要matcher.find(); 因为pattern.matcher(str);只是配置了matcher,必须调用find函数才会开始匹配。

而且你matcher.group(1)是获取第一个分组,但是你没有使用分组,所以得不到内容。
如果正则改成"(\\d8)",那你就可以获得内容了。

或者String tempStr = matcher.group();或者String tempStr = matcher.group(0);,这会得到整个正则匹配到的内容。
参考技术A 要的那一部分用()括上,取组就行了
或者取出来后再来一次正则匹配
参考技术B String str = "sdfqweid=icmp_77733329&234123";
String reg = "\\\\d+";
Pattern pattern = Pattern.compile (reg);
Matcher matcher = pattern.matcher (str);
while (matcher.find ())

System.out.println (matcher.group ());

追问

为啥加了matcher.find就可以了???

追答

这个就像是1+1=2道理一样,我也不好说,我半吊子,就是知道这样写就是了

本回答被提问者和网友采纳

以上是关于求教正则表达式如何匹配的主要内容,如果未能解决你的问题,请参考以下文章

Linux Shell正则表达式如何匹配1~3位数字

js正则判断一个字符串里必须包含大写字母,小写字母,数字,特殊字符? 必须包含其中三项,求教

求一条c# 正则表达式,来获取HTML标签的内容

年月日日期正则

正则表达式:数字开头中间字母结尾数字

正则表达式如何匹配空值?