正则表达式 求解(急急急) public static void main(String[] args) { Pattern p = Pattern.compile("asss(?=2211)"); Matcher m = p.matcher("asss2211"); System.out.println(m.matches()); }为什么 我用正向匹配 返回的是false 匹配不上 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Pattern p = Pattern.compile("asss(?=2211)\\d*"); 或Pattern p = Pattern.compile("asss(?=2211).*?");(?=2211)是向前零宽度正匹配,也就是匹配\\d*或.*?的时候,会向前扫描直到遇到2211为止,如果没有则匹配失败,而Pattern p = Pattern.compile("asss(?=2211)");后面没有\\d*或.*?的匹配,又怎么能继续向前扫描2211呢,也就是开始匹配asss以后,后面就不知道再去匹配什么了,好歹也出现个.*?之类的才能知道还要继续扫描后面的任意字符啊同理Pattern p = Pattern.compile("asss\\d*(?<=2211)"); 或Pattern p = Pattern.compile("asss.*?(?<=2211)");也能达到匹配成功Pattern p = Pattern.compile("asss(?=2211)\\d*"); 或Pattern p = Pattern.compile("asss(?=2211).*?");(?=2211)是向前零宽度正匹配,也就是匹配\\d*或.*?的时候,会向前扫描直到遇到2211为止,如果没有则匹配失败,而Pattern p = Pattern.compile("asss(?=2211)");后面没有\\d*或.*?的匹配,又怎么能继续向前扫描2211呢,也就是开始匹配asss以后,后面就不知道再去匹配什么了,好歹也出现个.*?之类的才能知道还要继续扫描后面的任意字符啊同理Pattern p = Pattern.compile("asss\\d*(?<=2211)"); 或Pattern p = Pattern.compile("asss.*?(?<=2211)");也能达到匹配成功Pattern p = Pattern.compile("asss(?=2211)\\d*"); 或Pattern p = Pattern.compile("asss(?=2211).*?");(?=2211)是向前零宽度正匹配,也就是匹配\\d*或.*?的时候,会向前扫描直到遇到2211为止,如果没有则匹配失败,而Pattern p = Pattern.compile("asss(?=2211)");后面没有\\d*或.*?的匹配,又怎么能继续向前扫描2211呢,也就是开始匹配asss以后,后面就不知道再去匹配什么了,好歹也出现个.*?之类的才能知道还要继续扫描后面的任意字符啊同理Pattern p = Pattern.compile("asss\\d*(?<=2211)"); 或Pattern p = Pattern.compile("asss.*?(?<=2211)");也能达到匹配成功 出问题了,我才复制粘贴一次就出现这么多次重新贴一次吧Pattern p = Pattern.compile("asss(?=2211)\\d*"); 或Pattern p = Pattern.compile("asss(?=2211).*?");(?=2211)是向前零宽度正匹配,也就是匹配\\d*或.*?的时候,会向前扫描直到遇到2211为止,如果没有则匹配失败,而Pattern p = Pattern.compile("asss(?=2211)");后面没有\\d*或.*?的匹配,又怎么能继续向前扫描2211呢,也就是开始匹配asss以后,后面就不知道再去匹配什么了,好歹也出现个.*?之类的才能知道还要继续扫描后面的任意字符啊同理Pattern p = Pattern.compile("asss\\d*(?<=2211)"); 或Pattern p = Pattern.compile("asss.*?(?<=2211)");也能达到匹配成功 Pattern p = Pattern.compile("asss(?=2211)"); Matcher m = p.matcher("asss2211"); System.out.println(m.matches());java API那蛋疼的翻译我还是叫它 肯定顺序环视 好了肯定顺序环视,匹配的是一个位置(不是一个字符),在该位置的右边,若能成功匹配环视里的子表达式,表示匹配成功"asss(?=2211)"其实匹配的就是asss这部分,后面的2211正则引擎只会去看下能不能匹配,但不会作为匹配结果而LZ用了matches,这个方法在正则匹配整个参数的时候才返回true,显然这里没有匹配整个参数字符串如果改用find方法,该有效果 Pattern p = Pattern.compile("asss(?=2211)"); Matcher m = p.matcher("asss2211"); while(m.find()){ System.out.println(m.group()); } 各位大侠看看是什么问题 这段代码点保存后 会弹出2个页面,奇怪~@@~ dasdas mysql中如何把本地的数据导入到远端服务器的数据库中去? hibernate中的inverse和cascade 如何在hibernate中执行原始的SQL语句? 各位高手,请问如何将java编写的socket服务器端做成windows服务? 用jrun做服务器,struts中的数据源怎么配置 请问哪个文档是讲解petstore1.3.2源码的? 请问有好点的关于STRUTS的教程或是文章吗(小弟在线守侯) spring mvc的跳转问题 struts异常求救!!!!
Pattern p = Pattern.compile("asss(?=2211).*?");
(?=2211)是向前零宽度正匹配,也就是匹配\\d*或.*?的时候,会向前扫描直到遇到2211为止,如果没有则匹配失败,
而
Pattern p = Pattern.compile("asss(?=2211)");
后面没有\\d*或.*?的匹配,又怎么能继续向前扫描2211呢,也就是开始匹配asss以后,后面就不知道再去匹配什么了,好歹也出现个.*?之类的才能知道还要继续扫描后面的任意字符啊同理
Pattern p = Pattern.compile("asss\\d*(?<=2211)"); 或
Pattern p = Pattern.compile("asss.*?(?<=2211)");
也能达到匹配成功Pattern p = Pattern.compile("asss(?=2211)\\d*"); 或
Pattern p = Pattern.compile("asss(?=2211).*?");
(?=2211)是向前零宽度正匹配,也就是匹配\\d*或.*?的时候,会向前扫描直到遇到2211为止,如果没有则匹配失败,
而
Pattern p = Pattern.compile("asss(?=2211)");
后面没有\\d*或.*?的匹配,又怎么能继续向前扫描2211呢,也就是开始匹配asss以后,后面就不知道再去匹配什么了,好歹也出现个.*?之类的才能知道还要继续扫描后面的任意字符啊同理
Pattern p = Pattern.compile("asss\\d*(?<=2211)"); 或
Pattern p = Pattern.compile("asss.*?(?<=2211)");
也能达到匹配成功Pattern p = Pattern.compile("asss(?=2211)\\d*"); 或
Pattern p = Pattern.compile("asss(?=2211).*?");
(?=2211)是向前零宽度正匹配,也就是匹配\\d*或.*?的时候,会向前扫描直到遇到2211为止,如果没有则匹配失败,
而
Pattern p = Pattern.compile("asss(?=2211)");
后面没有\\d*或.*?的匹配,又怎么能继续向前扫描2211呢,也就是开始匹配asss以后,后面就不知道再去匹配什么了,好歹也出现个.*?之类的才能知道还要继续扫描后面的任意字符啊同理
Pattern p = Pattern.compile("asss\\d*(?<=2211)"); 或
Pattern p = Pattern.compile("asss.*?(?<=2211)");
也能达到匹配成功
重新贴一次吧Pattern p = Pattern.compile("asss(?=2211)\\d*"); 或
Pattern p = Pattern.compile("asss(?=2211).*?");
(?=2211)是向前零宽度正匹配,也就是匹配\\d*或.*?的时候,会向前扫描直到遇到2211为止,如果没有则匹配失败,
而
Pattern p = Pattern.compile("asss(?=2211)");
后面没有\\d*或.*?的匹配,又怎么能继续向前扫描2211呢,也就是开始匹配asss以后,后面就不知道再去匹配什么了,好歹也出现个.*?之类的才能知道还要继续扫描后面的任意字符啊同理
Pattern p = Pattern.compile("asss\\d*(?<=2211)"); 或
Pattern p = Pattern.compile("asss.*?(?<=2211)");
也能达到匹配成功
Matcher m = p.matcher("asss2211");
System.out.println(m.matches());java API那蛋疼的翻译
我还是叫它 肯定顺序环视 好了
肯定顺序环视,匹配的是一个位置(不是一个字符),在该位置的右边,若能成功匹配环视里的子表达式,表示匹配成功"asss(?=2211)"其实匹配的就是asss这部分,后面的2211正则引擎只会去看下能不能匹配,但不会作为匹配结果而LZ用了matches,这个方法在正则匹配整个参数的时候才返回true,显然这里没有匹配整个参数字符串如果改用find方法,该有效果
Matcher m = p.matcher("asss2211");
while(m.find()){
System.out.println(m.group());
}