关于正则表达式的死循环有关问题

关于正则表达式的死循环问题
我要用一个正则表达式同时匹配如下内容,正则用 VBScript_RegExp_55_TLB 或perl

1、<div id="123">

2、<div id="123" class="xxx">

我这样写

<div id="123"([\s\S]*?)>

是可以取到子匹配 分别为空 和 class="xxx" ,注意,这里我是要子匹配能取到空值。
 
但是但在某些时候测试时,会发生死循环。


关于正则的说明有这样一段话

能匹配空字符串的子匹配不要循环无限次。如果括号内的子表达式中的每一部分都可以匹配 0 次,而这个括号整体又可以匹配无限次,匹配过程中可能死循环。虽然现在有些正则表达式引擎已经通过办法避免了这种情况出现死循环了,比如 .NET 的正则表达式,但是我们仍然应该尽量避免出现这种情况。如果我们在写表达式时遇到了死循环,也可以从这一点入手。


死循环应该与此有关,请问,要达到我的目的,该怎么写这个正则?



------解决方案--------------------
<div id="123"([^>]*)>
------解决方案--------------------
一般是.*?吧,但用类似[^>]的形式的正则效率更高一些,应当也能避免“死循环”,确实不通用,得具体情况具体分析
探讨
谢谢楼上,我那个举例,意思是希望有一个通用的 表示任意字符的子匹配,不一定是在HTML代码里 ,所以 [^>] 这个不合适。

------解决方案--------------------
不如举个死循环的实际例子来研究下?
探讨
引用:
一般是.*?吧,但用类似[^>]的形式的正则效率更高一些,应当也能避免“死循环”,确实不通用,得具体情况具体分析



用.的话,少了匹配换行,另外,因为是要获得这个字匹配的值,所以要用括号,但用括号按前面的说法,就可能出死循环问题。

------解决方案--------------------
死循环,应该是无限回溯,减少无限回溯的最好办法就是用较小的范围来匹配,尽量正则描述的精确一些,或是加一些容易导致失配的关键点。