java中的正则表达式一些问题

Pattern p=Pattern.compile("\\d{3,5}");
Matcher m=p.matcher("123-12546-1234-12");
p(m.matches());
这段代码怎么解释?
就是每一句话的意思

Pattern p=Pattern.compile("\\d{3,5}");
定义一个表达式模式,’\‘表示下一个字符是特殊字符,'\d'表示数字既0-9,{3,5}表示重复3到5次
总的来看:匹配由3个到5个数字组成的字符串(例如”123“,”2345“等)。

Matcher m=p.matcher("123-12546-1234-12");
通过p和字符串"123-12546-1234-12"建立一个匹配器,Matcher类中有很多方法,完成各种需求。比如matches方法,这里matches方法返回false,因为字符串和模式并不匹配;这里的模式p匹配的是所有由3个到5个数字组成的字符串(例如“1234")。

p(m.matches());
这里有语法错误。matches是Matcher类的一个方法,返回一个Boolean值
(在这里将返回false)。
p(m.matches())==p(false)?????????没意义啊
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-04
你好!很高兴为你解答。
首先给你讲解一些正则表达式的知识。
符号\d是特殊符号,等价的正则表达式为[0-9]
符号{3,5},表示匹配次数为3到5次
符号\,表示转义字符
小结:
\d不能单独使用,使用需配上\转义字符,所以出现\\d的情况
正则表达式:\\d{3,5}意思为匹配0-9这10个数字,需出现3-5字该集合中的数字
简而言之:就是例如1234则可以匹配到了,123也行 3456也行

其次,Pattern对象的public static Pattern compile(String regex)方法允许你把正则表达式编译成用来匹配的Pattern对象。
简而言之,就是把你的正则表达式编译

再次,Matcher对象根据Pattern对象和字符串进行匹配检查,就是利用matcher匹配123-12546-1234-12这串目标。

最后,我猜你是写错了,你可能想看匹配结果吧。Matcher对象的matches方法进行目标串的匹配,返回一个boolean类型的结果。

执行结果如下:
run:
false
true
成功生成(总时间:0 秒)

修改后源码:
/**
*
* @author yekeliang
*/
public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Pattern p = Pattern.compile("\\d{3,5}");
Matcher m = p.matcher("123-12546-1234-12");
System.out.println(m.matches());
Matcher m2 = p.matcher("1234");
System.out.println(m2.matches());
}
}

java中的正则表达式一些问题
定义一个表达式模式,’\\‘表示下一个字符是特殊字符,'\\d'表示数字既0-9,{3,5}表示重复3到5次 总的来看:匹配由3个到5个数字组成的字符串(例如”123“,”2345“等)。Matcher m=p.matcher("123-12546-1234-12");通过p和字符串"123-12546-1234-12"建立一个匹配器,Matcher类中有很多方...

java中使用正则表达式替换字符串时转义符反斜杠'\\'异常问题
1. 第一层转义:Java 字符串中的反斜杠用于转义。表示一个字面意义上的反斜杠需写作 '\\ '。2. 第二层转义:正则表达式同样使用反斜杠作为转义字符。为将字面意义上的反斜杠传递给正则表达式,需再对每个反斜杠使用两个反斜杠,即'\\\\\\ '。解决策略不依赖于处理用户输入内容。直接使用正则表达式查找并...

关于Java正则表达式问题
正则表达式是用括号进行分组的。按左括号的从左到右依次计入组别。而(?:)这个就不计入分组中了。举例:上面的例子中加了?:后面的\\1就取不到第一个分组了所以就会出错。而?=则是另一种理解方式了,一般管这个叫前瞻(也叫正向预判)先看看(?=)这部分是否符合,如果不符合那么就不能匹配。

java中正则表达式中非捕获组的一些问题
2、求一个正则表达式的写法,可以匹配比如说:开始和结尾分别是dog和cat,但是中间位置上不能有pig ^dog((?!pig).)*cat

正则表达式问题?
这个正则表达式有点问题。因为.的意思是匹配任意一个字符,所以.*就是匹配0个或多个任意字符,这显然不对。要匹配.(小数点),应该用转义\\.。而\\本身也需要转义\\\\,所以,要匹配小数点应该用\\\\.,如果小数点可选,那就应该是\\\\.?。所以,应将.*改成\\\\.?才对。下图是一个例子(java语言):

java中正则表达式的问题 零宽断言的
split方法虽然是用正则表达式实现的,但不能这么用。另外这个零宽断言有问题,我改了一下,不知道是不是你想要的。程序如下:Pattern pattern = Pattern.compile("(?<=0x)\\\\d+|(?<=0X)\\\\d+");Matcher matcher = pattern.matcher(x);while (matcher.find()) {System.err.println(matcher.group...

java下面这个正则表达式为什么是这样匹配?
第一个问题。and|And\\b\\w+在你给的文本中只能匹配and,也就是说你的表达式只有前半部分生效了。原因有2:第一,你的表达式有两部分,and和AND\\b\\w+引擎首先用第一部分去对目标文本检索,如果不成功才会用第二部分。而引擎在15-18的位置第一部分发现了and字符串,就报告成功了,忽略了第二部分...

java Matches正则表达式问题?
一个整数n如果是3的x次方,那把这个整数转换成3进制的字符串后只可能是:1 3^0 10 3^1 100 3^2 ...1...x个0 3^x 所以,如果3进制字符串能够匹配1后跟0个或多个0,就说明n是3的某次方。10*$就是匹配一个1后跟0个或多个0,然后是字符串结尾(用$来匹配)。表示匹配前面的模式0次...

java正则表达式的问题
1)("1234".matches("123"));后面的123应该是只能是123的意思 2)^是开头的意思,.是任意一个字符,*是重复任意多次,所以"1.*" 表示1后面跟0个或任意多个字符,^1表示只能是1 大家一起学吧:正则表达式30分钟入门教程 http:\/\/deerchao.net\/tutorials\/regex\/regex.htm ...

JAVA新手问一正则表达式问题
用来验证邮箱的啊 String regex="\\\\w{1,}@\\\\w{1,}\\56\\\\w{1,}";\\w{1,}: \\w 单词字符:[a-zA-Z_0-9] , X{1,} ,至少 1 次 --->匹配 \\w{1,}:匹配至少一个单词字符[a-zA-Z_0-9]\\56匹配点号“.”\\w{1,}-->匹配至少一个单词字符[a-zA-Z_0-9]形如a@163.com...

相似回答