日期:2014-05-20  浏览次数:20848 次

[正则]可否用零宽断言匹配
我可以用下面的表达式匹配一个带小数数字,而且保证头尾不会为零
"^(([1-9]\d*)|(0))(\.(([1-9])|(\d*[1-9])))?$",
能否改用零宽断言去匹配呢?我尝试过
"^(?(^[^0])[0-9]*|[1-9]*)[0-9](\.(?([^0]$)[0-9]*|[1-9]*))?$",
"^(?(^[^0])[0-9]*|[1-9]*)[0-9](\.(\d(?=([^0]$)))+)?$"
等。
但是小数部分没有完全搞定,另外整数部分改成这样为何就匹配不成功
"^(?(^[^0])[0]|[1-9])*[0-9]$",
另外,如何提高匹配效率?
请指教!谢谢!

------解决方案--------------------
必须有小数并且开头结尾不为0:^[1-9]\d*\.\d*[1-9]$   
匹配效率则主要看回溯次数,因此尽量减少回溯