作者mrker (ꬮ....)
看板java
标题[问题] 请教正则运算式的问题
时间Thu Jan 31 00:01:16 2013
请问版上各位高手
小弟最近在研究正则运算式
遇到一个困难
就是不知道有没有办法做出 "不匹配但是纪录群组" 的结果
例如解析地址
如果判断式为 (.*)市(.*)区(.*)路
目标字串为 "台北市信义区松智路"
会得到
group(0) = 台北市信义区松智路
group(1) = 台北
group(2) = 信义
group(3) = 松智
但如果输入 "台北市松智路"
少了"区" 就会没办法匹配
如果判断式改为 (.*)市(.*)区?(.*)路
一样输入 "台北市松智路"
会得到
group(0) = 台北市松智路
group(1) = 台北
group(2) = 松智
现在想问的是 有没有办法 就算没有匹配到"区"
但是有用小括号group起来 就记录为一个群组
例如 想得到的结果如下
group(0) = 台北市松智路
group(1) = 台北
group(2) = null
group(3) = 松智
用Regex Tester怎麽试都试不出来 = =|||
先感谢各位高手解答!
------------------------------------------------------------
自己再补充一下
如果正则运算式为 "(.*市)?(.*区)?(.*路)?"
可以达成目的
得到的结果如下
group(0) = 台北市松智路
group(1) = 台北市
group(2) = null
group(3) = 松智路
但是要求再多一点点的时候
不要那个[市]和[路]
只要[台北]和[松智]
我就无解了...
当然parse完再用程式去拆字串也是可以
不过现在不是写作业或是工作需求...
只是好奇有没有办法做到一个Pattern直接搞定
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.169.217.239
1F:推 PsMonkey:1.RegExp 版可能更适合 2.我会直接写程式拆 [遮脸] 01/31 00:05
※ mrker:转录至看板 RegExp 01/31 00:09
2F:→ mrker:这个需求是比较奇怪 有想过用程式拆解 但是毕竟不如正则方便 01/31 00:11
※ 编辑: mrker 来自: 1.169.217.239 (01/31 00:18)
3F:→ tkcn:不能这样写吗: "((.*)市)?((.*)区)?((.*)路)?" ? 01/31 00:26
4F:→ tkcn:试了一下没问题,当然 group 的 index 要改成 2,4,6 就是 01/31 00:35
5F:→ ssccg:(?:(.*)市)?(?:(.*)区)?(?:(.*)路)? ,(?:)是比对但不取得 01/31 00:41
6F:→ tkcn:↑ 多学了一招,3Q 01/31 00:44
7F:→ mrker:感谢楼上诸位 又学到新的比对方式 刚想了一下 更机车的case 01/31 00:47
8F:→ mrker:(?:(.*)市)?(?:(.*)道)? 台北市市民大道 会变台北市|民大道 01/31 00:49
9F:→ ssccg:把第一个 (.*) 换成 ([^市]*),就不会多吃一个市 01/31 01:06
10F:→ mrker:太感谢了 正则这东西 我永远这东西对我真是像天书一样 01/31 01:08
11F:→ eieio:我会把第一个 (.*) 换成 (.*?) 它会尽量吃越少越好 01/31 01:09