社区
数据结构与算法
帖子详情
能否用正则表达式处理类似 A [B C]和 A B 以及 A C的匹配
zzyx
2003-03-18 10:28:54
有两个串,形式为 A [B C] 或者更多,[]代表其内部为或的关系
串一:zhang [peng ping]
串二:[zhao zhang][ping pang]
我想要实现的是对以上两个串,应该有串一的:zhang ping和串二的:zhang ping 匹配。
能否用正则表达式实现对以上串的匹配?怎么做?
或者有别的办法来处理?
哪位大侠出手吧?
...全文
142
9
打赏
收藏
能否用正则表达式处理类似 A [B C]和 A B 以及 A C的匹配
有两个串,形式为 A [B C] 或者更多,[]代表其内部为或的关系 串一:zhang [peng ping] 串二:[zhao zhang][ping pang] 我想要实现的是对以上两个串,应该有串一的:zhang ping和串二的:zhang ping 匹配。 能否用正则表达式实现对以上串的匹配?怎么做? 或者有别的办法来处理? 哪位大侠出手吧?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shshsh_0510
2003-03-27
打赏
举报
回复
我没太懂你的问题,不过好像类似词法分析。
你说的“ABC1234x“的二意性当然会存在。著名的lex处理这种二义性的方法是以下两条优先原则:
1、匹配最长的串
2、匹配规则表中位置靠前的
不知对你是否有帮助。
zzyx
2003-03-22
打赏
举报
回复
啊普
zzyx
2003-03-19
打赏
举报
回复
更正:上边的
a [ b c d] e 得到的一个组合
a b e
a c e
b d e
改为
a [ b c d] e 得到的一个组合
a b e
a c e
a d e
zzyx
2003-03-19
打赏
举报
回复
非常感谢以上的朋友的帮助。
TO: plainsong(伤心的风)
我想,按照你的思路,
用表达式:"ABC(1234)|(123)(4x)|(5y)"去匹配"ABC1234x"
是可以实现的。
但麻烦的是 ABC1234x也可能是另外一个类似ABC(1234)|(123)(4x)|(5y)的串。
可能我的表达不清除,再举例子:
以下a b c d e x y 等都代表一个不包括空格的字符串,[]代表其中的串是或的关系
a [ b c d] e 得到的一个组合
a b e
a c e
b d e
另外一个串
a [b x] [e y]的可能性为
a b e
a b y
a x e
a x y
则以上的 a b e为匹配的。
另外,我在遇到这个问题的时候才刚接触正则表达式,术语,符号都不清楚呢,所以才提问能否使用。
我现在已经把这个问题先处理掉了,就是按照我上边的例子的思路,对每个串顺序遍历,使用2维数组,保存分解出的字符串,然后再比较数组,判断。只是觉得比较笨。
TO:tarkey(天星)
KMP查找算法按我的理解比较时候直接从固定的串中找特定的串
在我的问题中我想不到如何应用
短歌如风
2003-03-19
打赏
举报
回复
你用的正则表达式的语法好怪呀!一般都是这样表达的:
"zhang (peng)|(ping)"
而"zhang [peng ping]"通常都匹配"zhang p"、"zhang e"、"zhang "等。
匹配时不应直接使用表达式字串,要先对它进行分析。如果只是解决你这个问题的话比较简单,你可以写两个类,一个负责简单的匹配(目标字串的左子串与指定字串相比较),一个负责用一个字串列表去依次进行简单匹配直到成功或全部失败。
在用列表匹配时可能会有多个成功的结果,你要按一个顺序继续后续的匹配,如果整个表达式匹配成功则成功,否则再选择下一个。如:
用表达式:"ABC(1234)|(123)(4x)|(5y)"去匹配"ABC1234x":
1:"ABC" 匹配 "ABC"成功,剩余字串:"1234x";
2:"(1234)|(123)"匹配"1234"成功,剩余字串:"x";
3:"(4x)|(5y)"匹配失败。重新第二步匹配。
4:"(1234)|(123)"匹配"123"成功,剩余字串:"4x";
5:"(4x)|(5y)"匹配"4x"成功。
一般实用的正则表达式语法都很复杂,很难用简单的方法实现。建议使用“解释器”模式。
tarkey
2003-03-19
打赏
举报
回复
你去看看KMP算法吧。。
zzwu
2003-03-18
打赏
举报
回复
想法如下:
char a='A';
char b={'B','C','D'};
char c={'E','F'};
for (i=0; i<3; i++)
for (j=0; j<2; j++)
println(a+b[i]+c[j]);
zzyx
2003-03-18
打赏
举报
回复
或者有办法能实现把如 A [B C D][E F]
这样的表达式转为
A B E
A B F
A C E
A C F
A D E
A D F
也好,有思路有分
zzyx
2003-03-18
打赏
举报
回复
谢谢zzwu(未名) 。
我想你的思路基本可行,但具体实现上还有些困难。
首先,A B C等等都是代表一个长串中的子串,分解有些麻烦,存储也麻烦
其次,每个串的具体长度是不固定的,存储上需要考虑的东西比较多
我能想到最土的办法实现,但是想找找有没有比较精巧的方法。
CentOS 英文版安装中文环境与中文输入法
安装了英文版的CentOS,发现没中文的日子真是太难熬了(文件乱码,无法使用中文注释)。被虐后决定还是把中文安环境安装上。1.安装ibus,如果使用的CentOS 6 可以跳过,CentOS 6 已经默认安装了;#yum install ibus 2将ibusz中的中文文件拷贝到英文环境下;#cp /usr/share/locale/zh_CN/LC_MESSAGES/ib...
在CentOS 6.5 环境下安装中文输入法
在CentOS 6.5 环境下安装中文输入法 1.首先切换root用户: 2.输入安装命令: 此处需用到yum,在一些CentOS中,yum源是需要修改的,将镜像换成国内的。如果你的yum不能安装的话,可以看看这个链接。 (1)在此处报错了,因为mirror的问题不能安装成功。 这是因为在虚拟机后未联网。 点击联网。 再次输入安装命令。 安装完成。 3.在屏幕左上角找到:系统->首选项->输入法。英文版为:System -> Perferences -> Input M
centos/linux安装中文输入法
如果你装了个纯净的linux/centos系统,而且是装了英文版本的,没有中文输入法,怎么办呢? 很简单,只要安装SCIM 在光盘中可以找到下面几个rpm包,安装后reboot/init6就可以有中文输入法 上面两个包是用来支持中文字符集的 fonts-chinese-3.02-9.6.el5.noarch.rpm fonts-ISO8859-2-75dpi-1.0-17.1.noa
英文版CentOS安装中文输入法 terminal支持中文方法
英文环境下CentOS使用ibus输入法 一般我们使用英文环境是没有办法使用中文的,这是因为我们没有设置在英文环境下的中文配置。下面我们在英文环境下配置中文输入法ibus使得我们可以输入中文。 首先,安装ibus(centos6以后已经默认安装) #yum install ibus 其次,将安装到文件复制到英文环境下 #cp /usr/share/locale/zh_CN/LC_
centos英文版中 中文乱码的问题
问题: 安装centos时选择了英文版,系统显示中文时出现了乱码的现象。 解决办法: 因为英文系统不支持中文,所以需要下载中文包。 $yum -y install fonts-chinese $yum -y install fonts-ISO8859 然后修改配置文件 $ vim /etc/sysconfig/i18n 将: LANG="en_
数据结构与算法
33,026
社区成员
35,334
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章