[已解决]正则高手解决此题(多字符嵌套)
本帖最后由 binghc 于 2010-9-18 17:02 编辑<div id="0">
0
</div>
<div id="1">
1
<div id="2">
2
</div>
</div>
要求提取最外层div标签。最后结果为:
<div id="0">
0
</div>
——————————————————
<div id="1">
1
<div id="2">
2
</div>
</div>
此题正则该如何写?(div标签要配对) $Str = _
'<div id="0">' & @CRLF & _
' 0' & @CRLF & _
'</div>' & @CRLF & _
'<div id="1">' & @CRLF & _
' 1' & @CRLF & _
' <div id="2">' & @CRLF & _
' 2' & @CRLF & _
'</div>' & @CRLF & _
'</div>'
Msgbox(0, '原字符串', $str)
$sR = StringRegExp($str, '(?s)<div.+?</div>(?:\s+</div>)?', 3)
For $i = 0 to UBound($sR) - 1
Msgbox(0, '[' & $i & ']', $sR[$i])
Next 不区分大小写,匹配<div到</div>的内容,但不包括换行和空白到</div>的内容 回复 3# liufenglg
最后的问号表示:换行和空白到</div>的内容,可能出现也可能不出现 回复 4# liufenglg
* 匹配0或多次
+ 匹配1或多次
? 匹配0或1 本帖最后由 liufenglg 于 2010-9-17 15:52 编辑
+?
应该是已经匹配过的不再匹配
匹配1或多次,后面跟?号,表示前面有匹配或匹配1次 本帖最后由 afan 于 2010-9-17 15:56 编辑
LS请在一贴说完。
应对更多情况:
$Str = _
'<DIV id="a">' & @CRLF & _
' a' & @CRLF & _
' <div id="b1">' & @CRLF & _
' b1' & @CRLF & _
' </div>' & @CRLF & _
' <div id="b2">' & @CRLF & _
' b2' & @CRLF & _
' </div>' & @CRLF & _
'</DIV>' & @CRLF & _
'<div id="0">' & @CRLF & _
' 0' & @CRLF & _
'</div>' & @CRLF & _
'<div id="1">' & @CRLF & _
' 1' & @CRLF & _
' <div id="2">' & @CRLF & _
' 2' & @CRLF & _
' <div id="3">' & @CRLF & _
' 3' & @CRLF & _
' </div>' & @CRLF & _
' </div>' & @CRLF & _
'</div>'
Msgbox(0, '原字符串', $str)
$sR = StringRegExp($str, '(?s)(?i)<div.+?(?:\<d.+?</div>)*(?:\s*</div>)+', 3)
For $i = 0 to UBound($sR) - 1
Msgbox(0, '[' & $i & ']', $sR[$i])
Next
本帖最后由 binghc 于 2010-9-17 19:06 编辑
回复 2# afan
我想问下(?S)代表什么意思?
(?)(i)又是什么代表什么?
先谢过 回复 1# binghc
解决了问题请及时加注“已解决”字样。 本帖最后由 binghc 于 2010-11-7 12:22 编辑
既然版主不肯说,那我来说:
(?s)、(?i)这些都是模式修饰符,其中(?i)代表不区分大小写匹配模式,而(?s)则代表点号通配模式
页:
[1]