正则中如果有一个段匹配有时会出现有是没有,如何将其设置为optional匹配呢?

2013-08-04 13:43:03 +08:00
 pinkman
<a href="viewthread.php\?tid=(.*)(..style.*)">(.*)<\/a>\s+.*\s+.*\s+.*\s+.*">(.*)<\/span><\/td>

其中的(..style.*)并非每次都有,如果这样写,遇到没有的时候就匹配不出来了,请问如何能够将其弄成optional的呢?加[]?我试了下好像不行
2391 次点击
所在节点    问与答
6 条回复
lululau
2013-08-04 13:44:04 +08:00
右原括号后面直接加个问号就行了
lululau
2013-08-04 13:44:19 +08:00
右圆括号后面直接加个问号就行了
pinkman
2013-08-04 13:46:23 +08:00
@lululau (..style.*)?这般?不行,这样的话,在有的情况下,第一个group匹配出来的结果就成了
11&extra=page%3D1" style="font-weight: bold;color: red,而我需要的是11&extra=page%3D1
pinkman
2013-08-04 13:49:43 +08:00
整段html如下,其中style属性就是标题有,有些标题没有

<a href="viewthread.php?tid=11&extra=page%3D1" style="font-weight: bold;color: red">(28/12/2013更新)</a>
&nbsp; &nbsp;( <img src="images/wtat-1/multipage.gif" align="absmiddle" border="0"> <a href="viewthread.php?tid=11&extra=page%3D1&page=1">1</a> <a href="viewthread.php?tid=11&extra=page%3D1&page=2">2</a> <a href="viewthread.php?tid=11&extra=page%3D1&page=3">3</a> <a href="viewthread.php?tid=11&extra=page%3D1&page=4">4</a> )</td></tr></table>
</td><td width="14%" class="altbg1" align="center">
<a href="viewpro.php?uid=3">作者</a>
<br><span class="smalltxt">2012-8-29</span></td>
<td width="6%" class="altbg2" align="center">114</td>
<td width="6%" class="altbg1" align="center">13652</td>
<td width="19%" class="altbg2">
<table cellpadding="0" cellspacing="0" border="0" width="100%"><tr align="right">
<td nowrap><font class="smalltxt">2013-7-19 02:56<br>
lululau
2013-08-04 14:03:45 +08:00
tid=(.*) 改成 tid=([^"]*)
pinkman
2013-08-04 14:09:50 +08:00
@lululau 感谢lululau,还是不行,这样做了后,如果将html中的 style="font-weight: bold;color: red"删掉后,就匹配不出来东西了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/77940

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX