社区
C++ 语言
帖子详情
求一正则表达式,可不可以在匹配到的结果中在进行匹配,一个正则表达式搞定?
force2004
2008-01-29 01:06:03
举个例子,有一段文本:....A.....B....C....
我要需要的信息在B和C之间,现在要做的就是
1.从B(有特征字符串)开始匹配,到C结束,这个匹配结果就一个。
2.从1匹配到的结果中再次进行匹配,这个匹配结果是多个。如果用正则表达式直接匹配原文本,很可能匹配到B之前的一些字符串。
想问的是:这个操作可不可以在一个正则表达式里完成。
...全文
316
15
打赏
收藏
求一正则表达式,可不可以在匹配到的结果中在进行匹配,一个正则表达式搞定?
举个例子,有一段文本:....A.....B....C.... 我要需要的信息在B和C之间,现在要做的就是 1.从B(有特征字符串)开始匹配,到C结束,这个匹配结果就一个。 2.从1匹配到的结果中再次进行匹配,这个匹配结果是多个。如果用正则表达式直接匹配原文本,很可能匹配到B之前的一些字符串。 想问的是:这个操作可不可以在一个正则表达式里完成。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
force2004
2008-01-31
打赏
举报
回复
谢谢各位,结贴了!
taodm
2008-01-30
打赏
举报
回复
如果想要的字符串,数目不确定,那么2次解析。不要浪费时间了。
taodm
2008-01-30
打赏
举报
回复
如果想要的字符串,数目不确定,那么2次解析。不要浪费时间了。
BluntBlade
2008-01-29
打赏
举报
回复
如果B的长度固定,而且语言支持顺序/逆序环视的话,可以这样写:
(?<B)(?:匹配表达式)*(?=C)
但这样也只能提取出所有符合匹配的内容,而不能分开。
goodmrning
2008-01-29
打赏
举报
回复
关注
force2004
2008-01-29
打赏
举报
回复
如果B的长度固定,而且语言支持顺序/逆序环视的话,可以这样写:
(? <B)(?:匹配表达式)*(?=C)
但这样也只能提取出所有符合匹配的内容,而不能分开。
——————————————————————————————————————————————————————
依据这个思路,我可以匹配到结果,但是最匹配到最后一个结果,其他的都匹配不到,我举个例子如下,并给我的正则表达式,大家看看有没有办法改进。
文本字符串为:
<table>
<tr><td>不想要的字符串 a</td></tr>
<tr><td>不想要的字符串 b</td></tr>
<tr><td>不想要的字符串 c</td></tr>
</table>
<table>
<tr><td>特殊字符串</td></tr>
<tr><td>想要的字符串 e</td></tr>
<tr><td>想要的字符串 f</td></tr>
<tr><td>想要的字符串 g</td></tr>
</table>
<table>
<tr><td>不想要的字符串 h</td></tr>
<tr><td>不想要的字符串 i</td></tr>
<tr><td>不想要的字符串 j</td></tr>
</table>
我的正则表达式为:
特殊字符串(?:.*?<td.*?>(.*?)</td>)*?\s*?</tr>\s*?</table>
依次匹配到的结果是:想要的字符串 g
这个正则表达式还能改进吗?潜意识里我觉得这个思路是对的,只是我还有那个地方做的不对。。
jixingzhong
2008-01-29
打赏
举报
回复
不认为可行
星羽
2008-01-29
打赏
举报
回复
因为你后来还要匹配多个,用一个表达式不太可能吧
taodm
2008-01-29
打赏
举报
回复
不可以。
我啃
2008-01-29
打赏
举报
回复
为什么不分两步?
首先
B([可能出现的字符]*)C
然后将上面的结果再处理
如果要合成一个,那么需要有严格的格式限定
LZ现在的格式很松散
A B C咋样都不知道,四处...的格式也不知道怎么干?
Oversense
2008-01-29
打赏
举报
回复
我也想知道这个
BluntBlade
2008-01-29
打赏
举报
回复
“当由sub_match<>表示的标记子匹配被重复时,sub_match对象代表最后一次重复获得的匹配。完整的捕获集可以通过captures()成员函数访问(注:这里有隐含有严重的效能损失,所以你必须显式地启用这个特性)。”
引自
http://www.stlchina.org/twiki/bin/view.pl/Sandbox/NirvanaStlSandbox
楼主还是分两个表达式比较好。
BluntBlade
2008-01-29
打赏
举报
回复
不知道Boost::Regex是否支持重复型的捕获括号组,如果支持的话你的需求还是有办法满足的。
taodm
2008-01-29
打赏
举报
回复
你还是具例吧。
force2004
2008-01-29
打赏
举报
回复
谢谢楼上几位,我把问题在具体一下。
我要搜索的是html里面的一个table里的几个<td>的内容,这个table的属性有特殊关键字,<td>里面的内容是没有特殊标记的,所以如果我直接匹配想要的<td>里面的内容的话,很可能匹配到这个html页面里面其他的table里的<td>,所以就有了上面的1和2两个步骤。之所以想写一个正则表达式,是迫于现实情况,如果非要两个搞定,就只能修改程序了。正则表达式匹配用的是boost的正则表达式。
(提问的时候本想把问题抽象出来,结果弄巧成拙,BS下自己。)
正则表达式
函数笔记.php
php
正则表达式
笔记,本人手写的 //----正则
匹配
----- $p = '/example/' $str = "I am an example"; preg_match($p,$str); //如果$str
中
含有$p两个/
中
间的内容(内容不要求完全相同,要求为包含于关系),则返回真 //此时'/example/'就为一
正则表达式
//另外,//可以为分隔符,分隔符可以是非数字、非反斜线、非空格的任意字符。 //经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~) //分隔符后面可以使用模式修饰符,模式修饰符包括:i, m, s, x等,例如使用i修饰符可以忽略大小写
匹配
正则工具(不要下,本资源
中
有另一正则的)
正则表达式
编写工具,在线看到效果
javascript
正则表达式
和字符串RegExp and String(一)
前言
正则表达式
是javascript非常重要和常用的功能,在jquery等大型框架
中
用的非常频繁,最近抽时间学习了解了相关知识,记录下来与需要的朋友分享。 思维导图 RegExp(
正则表达式
)的创建方式 可以通过两种方式创建
一个
RegExp,具体如下: 通过/…./的方式来创建
正则表达式
(注意: /……/两边是没有单引号或双引号的) 通过RegExp构造方法来创建一
正则表达式
为了更好的描述模式,
正则表达式
提供了3个标识,分别是: g/i/m g: 全局
匹配
:在整个字符串
中
匹配
,而不是在第一次
匹配
后之后停止 i: 忽略大小写
匹配
m: 对多行字符串
中
的每一行,应用行首和行末的特殊字符(分别
正则表达式
[\s\S]*与[\w\W]* 什么意思
问: 例如:[a-z]表示从a到z之间的任意
一个
。 不是这样的吗?谁能给我解释一下[ ]的所有用法?感谢 答: 是完全通配的意思,\s是指空白,包括空格、换行、tab缩进等所有的空白,而\S刚好相反 这样一正一反下来,就表示所有的字符,完全的,一字不漏的。 另外,[]这个符号,表示在它里面包含的单个字符不限顺序的出现,比如下面的正则: [ace]* 这表示,只要出现a/c/e这三个任意的字母,都会被
匹配
[\s]表示,只要出现空白就
匹配
[\S]表示,非空白就
匹配
\w
匹配
包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。 \W
匹配
任何非单词字符。等价于“[^A-Za-z0-
C++编译原理实验1NFA转化
主要内容– 任给一
正则表达式
转化为不确定自动机NFA –NFA转化为确定自动机 DFA–DFA最小化
C++ 语言
64,648
社区成员
250,476
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章