作者mrker (ꬮ....)
看板RegExp
标题[问题] 请教正则运算式的问题
时间Thu Jan 31 00:09:28 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
※ 编辑: mrker 来自: 1.169.217.239 (01/31 00:10)
※ 编辑: mrker 来自: 1.169.217.239 (01/31 00:19)
1F:→ qwertmn:用直觉点写 (.*(?=市))?市?(.*(?=区))?区?(.*(?=路))?路? 01/31 00:46
2F:推 No:(.+)市(?:(.+)区)?(.+)路 01/31 00:49
3F:→ mrker:谢谢 都可以work 不过台湾地址规则复杂 还在找稳当的做法 02/04 01:43
4F:推 DeathWatch:建议可以去看邮局的规则 02/04 22:57