Chinaunix

标题: 求教 关于java正则 [打印本页]

作者: panghaoyu    时间: 2013-10-09 15:30
标题: 求教 关于java正则
本帖最后由 panghaoyu 于 2013-10-10 12:39 编辑

大家好,

我想用java 的正则 提取 1234-5678 之类的字符串中的数字 ,

提取结果 为 12345678,也就是把那个“-”去掉

我这样写 正则的 (.+)(?=-)(?<=-)(.+)

结果什么也没有匹配上,我只能使用  matcher.group() 获取结果,group 不能加参数

请大家指点我一下
作者: rover12421    时间: 2013-10-09 20:19
(\d+)-(\d+)
group(1)+group(2)

更简单的用String.replace
作者: panghaoyu    时间: 2013-10-10 12:39
谢谢 rover12421 的帮助 ,

由于程序的限制 ,我只能 调用 group(),group(1)+group(2) 是不允许的,

而且不准用 String.replace

还有别的办法吗?
作者: rover12421    时间: 2013-10-10 18:05
回复 3# panghaoyu


    只用一個group(),是做不到的, group()是

返回在以前匹配操作期间由给定组捕获的输入子序列。
对于匹配器 m 、输入序列 s 和组索引 g ,表达式 m. group( g ) 和 s. substring( m. start( g ),  m. end( g )) 是等效的。
捕获组是从 1 开始从左到右的索引。组零表示整个模式,因此表达式 m.group(0) 等效于 m.group() 。
如果该匹配成功了,但指定组未能匹配输入序列的任何部分,则返回 null 。注意,某些组(例如,(a*) )匹配空字符串。当这些的组成功匹配输入中的空字符串时,此方法将返回空字符串。


    除非允许while,匹配\\d+即可
  1. while (matcher.find()) {
  2.                         System.out.print(matcher.group());
  3.                 }
复制代码

作者: panghaoyu    时间: 2013-10-11 09:28
谢谢 rover12421 的 再次指点

我需要一次操作就提取 “1234-5678” 中 的 数字 ,

我写的正则表达式 哪里出错了  (.+)(?=-)(?<=-)(.+)

作者: rover12421    时间: 2013-10-11 10:36
回复 5# panghaoyu


     "(?=-)"和"(?<=-)"重复了,导致中间必须是2个"-"才能匹配上
作者: lll1985911    时间: 2013-10-17 12:42
转载一片正则文章:http://blog.csdn.net/lxcnn/article/details/4146148#t1




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2