求一正则表达式,可不可以在匹配到的结果中在进行匹配,一个正则表达式搞定?

force2004 2008-01-29 01:06:03
举个例子,有一段文本:....A.....B....C....
我要需要的信息在B和C之间,现在要做的就是
1.从B(有特征字符串)开始匹配,到C结束,这个匹配结果就一个。
2.从1匹配到的结果中再次进行匹配,这个匹配结果是多个。如果用正则表达式直接匹配原文本,很可能匹配到B之前的一些字符串。

想问的是:这个操作可不可以在一个正则表达式里完成。
...全文
316 15 打赏 收藏 转发到动态 举报
写回复
用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下自己。)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧