. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』 » 专题:命令正则

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 关闭主题
 
主题工具
funnyPC
 
funnyPC 的头像
『手机数码』版主
 
资 料:
注册日期: Oct 2003
帖子: 8,127 声望值: 4
精华: 13,解答: 23
#1 旧 2012-12-16, 22:52:39 默认 【求助】问个正则匹配的问题
funnyPC 当前离线  

php中用的,虽然已经通过其他的途径解决了问题,不过疑惑还是想解一下。

要从网址中匹配QQ的表情快捷键以供进一步处理

引用:
作者: QQ表情快捷键
/pz /se /fd /dy /ll /hx /bz /shui /dk /gg /fn /tp /cy /jy /ng /kuk /feid /zk /tu /tx /ka /baiy /am /jie /kun /jk /lh /hanx /zhm /yiw /xu /yun /zhem /shuai /kb /qd /kl /zhh /yhh /fendou /qiao /zj /shan /fad /tiao /zhao /yb /wen /xin /xs /fw /oh /mg /dx /aiq /qiang /ruo /ws /gz /shl /zt /maom /xg /mm /db /dd /mn /hl /qz /fan /bb /qianc /dp /bei /bj /qsh /xig /kf /zhd /dao /zq /yy /yw /shd /lw /sj /ds /ty /yl /hy /dh /yj
希望匹配的部分除了/不捕获外,其余的字串可以分为两部分捕获,第1部分就是第1个字符,第2部分是剩余的所有字符。
例如:/tpC2wU,需要捕获t为第1部分,捕获p为第2部分

使用
引用:
/((p)(z)|(s)(e)|(f)(d)|(d)(y)|(l)(l)|(h)(x)|(b)(z)|(s)(hui)|(d)(k)|(g)(g)|(f)(n)|(t)(p)|(c)(y)|(j)(y)|(n)(g)|(k)(uk)|(f)(eid)|(z)(k)|(t)(u)|(t)(x)|(k)(a)|(b)(aiy)|(a)(m)|(j)(ie)|(k)(un)|(j)(k)|(l)(h)|(h)(anx)|(z)(hm)|(y)(iw)|(x)(u)|(y)(un)|(z)(hem)|(s)(huai)|(k)(b)|(q)(d)|(k)(l)|(z)(hh)|(y)(hh)|(f)(endou)|(q)(iao)|(z)(j)|(s)(han)|(f)(ad)|(t)(iao)|(z)(hao)|(y)(b)|(w)(en)|(x)(in)|(x)(s)|(f)(w)|(o)(h)|(m)(g)|(d)(x)|(a)(iq)|(q)(iang)|(r)(uo)|(w)(s)|(g)(z)|(s)(hl)|(z)(t)|(m)(aom)|(x)(g)|(m)(m)|(d)(b)|(d)(d)|(m)(n)|(h)(l)|(q)(z)|(f)(an)|(b)(b)|(q)(ianc)|(d)(p)|(b)(ei)|(b)(j)|(q)(sh)|(x)(ig)|(k)(f)|(z)(hd)|(d)(ao)|(z)(q)|(y)(y)|(y)(w)|(s)(hd)|(l)(w)|(s)(j)|(d)(s)|(t)(y)|(y)(l)|(h)(y)|(d)(h)|(y)(j))
则只能将tp作为整体捕获到\1

使用
引用:
/(?:(p)(z)|(s)(e)|(f)(d)|(d)(y)|(l)(l)|(h)(x)|(b)(z)|(s)(hui)|(d)(k)|(g)(g)|(f)(n)|(t)(p)|(c)(y)|(j)(y)|(n)(g)|(k)(uk)|(f)(eid)|(z)(k)|(t)(u)|(t)(x)|(k)(a)|(b)(aiy)|(a)(m)|(j)(ie)|(k)(un)|(j)(k)|(l)(h)|(h)(anx)|(z)(hm)|(y)(iw)|(x)(u)|(y)(un)|(z)(hem)|(s)(huai)|(k)(b)|(q)(d)|(k)(l)|(z)(hh)|(y)(hh)|(f)(endou)|(q)(iao)|(z)(j)|(s)(han)|(f)(ad)|(t)(iao)|(z)(hao)|(y)(b)|(w)(en)|(x)(in)|(x)(s)|(f)(w)|(o)(h)|(m)(g)|(d)(x)|(a)(iq)|(q)(iang)|(r)(uo)|(w)(s)|(g)(z)|(s)(hl)|(z)(t)|(m)(aom)|(x)(g)|(m)(m)|(d)(b)|(d)(d)|(m)(n)|(h)(l)|(q)(z)|(f)(an)|(b)(b)|(q)(ianc)|(d)(p)|(b)(ei)|(b)(j)|(q)(sh)|(x)(ig)|(k)(f)|(z)(hd)|(d)(ao)|(z)(q)|(y)(y)|(y)(w)|(s)(hd)|(l)(w)|(s)(j)|(d)(s)|(t)(y)|(y)(l)|(h)(y)|(d)(h)|(y)(j))
则都捕获不到。
但是最外层的括号又不能不用。

这种情况是正则无法解决的吗?
wiise
 
wiise 的头像
支柱会员
 
资 料:
注册日期: Mar 2002
帖子: 4,814 声望值: 5
精华: 0,解答: 2
#2 旧 2012-12-16, 23:27:05 默认
wiise 当前离线  

最外层的括号肯定有问题,可以尝试用循环,换个思路吧
MacOS
 
MacOS 的头像
热心会员
 
资 料:
注册日期: Aug 2002
帖子: 13,406 声望值: 5
精华: 0,解答: 129
#3 旧 2012-12-16, 23:46:34 默认
MacOS 当前离线  

举例有问题?/tpC2wU应该是t为第一pC2wU为第二才是题意吧

/(.)([^/]*)
\1\2
这样写不是更简单


HIDDEN MESSAGE LEVEL 3
14863 159357 789 159357 3245687 3684
不死鸟
 
不死鸟 的头像
热心会员
 
资 料:
注册日期: Sep 2002
帖子: 6,533 声望值: 5
精华: 1,解答: 24
#4 旧 2012-12-17, 03:07:20 默认
不死鸟 当前离线  

他这个是/tp是表情定义符,C2wU是正文内容,不能被匹配在里面。
你这个是特定字符串数组的匹配,还真不如像2楼说的,用循环或是其他的方式解决,比如说你把第一次匹配到的字符串赋值之后再给这个做次匹配好了。
你就算把外面的括号给拿掉了,匹配到的参数位置也只是提前了一下,无助于解决问题。


我出生时很乖,长大后很帅,MM见我就不拽,媚眼使劲向我抛,可惜我有一点坏,向来是玩过就甩,所以至今单身你勿奇怪,想追帅哥的美女请赶快…… ^o^ !
----------------------------------------------
无从了解凤凰涅磐时的痛苦,但我清楚那是成长路上不可少的经历!
funnyPC
 
funnyPC 的头像
『手机数码』版主
 
资 料:
注册日期: Oct 2003
帖子: 8,127 声望值: 4
精华: 13,解答: 23
#5 旧 2012-12-17, 09:50:54 默认
funnyPC 当前离线  

引用:
作者: 不死鸟 查看帖子
他这个是/tp是表情定义符,C2wU是正文内容,不能被匹配在里面。
你这个是特定字符串数组的匹配,还真不如像2楼说的,用循环或是其他的方式解决,比如说你把第一次匹配到的字符串赋值之后再给这个做次匹配好了。
你就算把外面的括号给拿掉了,匹配到的参数位置也只是提前了一下,无助于解决问题。
意思就是仅靠正则搞不定?
其他方式就不用考虑了,用substr取matches[0]自己判断就解决了。只是好奇正则对此是否无解。
MacOS
 
MacOS 的头像
热心会员
 
资 料:
注册日期: Aug 2002
帖子: 13,406 声望值: 5
精华: 0,解答: 129
#6 旧 2012-12-17, 10:42:54 默认
MacOS 当前离线  

那还不如写个脚本或程序,直接读取值列表,你拆散了写维护会很复杂
不死鸟
 
不死鸟 的头像
热心会员
 
资 料:
注册日期: Sep 2002
帖子: 6,533 声望值: 5
精华: 1,解答: 24
#7 旧 2012-12-17, 17:40:03 默认
不死鸟 当前离线  

引用:
作者: funnyPC 查看帖子
意思就是仅靠正则搞不定?
其他方式就不用考虑了,用substr取matches[0]自己判断就解决了。只是好奇正则对此是否无解。
至少我的菜鸟水平是没想出写法来。
另外就像ls说的,你这样拆着写,维护起来的确是一件痛苦的事情,而且非必要的情形下,我一般都尽量不用正则来解决问题,这玩意写的时候是挺爽的,但后期维护的时候真是会要人命的。
发表新主题 关闭主题

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 10:54:43.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号