正则表达式命名组

时间:2014-01-17 09:18:44

标签: regex vb.net

我目前正试图连接两个小组,但我的表达失败了。

第一组应该包含0-9和一个完整的停止次数。第二组a到z加一个加号,按照自己的意愿。 HTML重复自我约300次,所以我只添加了两个例子。这只会匹配第一个实例而不再匹配。

Imports System.Text.RegularExpressions

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim text = "<tr><td>123.456<script type=""text/javascript"">document.write("":""+hello)</script></td><td>some html</td><td>date time</td><td>person</td></tr><tr><td>567.789<script type=""text/javascript"">document.write("":""+world)</script></td><td>html</td><td>time date4</td><td>person</td></tr>"
        Dim rx As New Regex("<tr><td>(?<Number>[0-9.]+?)<script.+document\.write\("":""(?<Document>[a-z+]+?)\)</script>")

        For Each m As Match In rx.Matches(text)
            MsgBox(m.Groups(1).Value & vbNewLine & m.Groups(2).Value)
        Next
    End Sub
End Class

2 个答案:

答案 0 :(得分:0)

问题是。+脚本之后是贪婪的。将其更改为。+? (不贪心)似乎可以做到这一点。

regex101 example

此致

答案 1 :(得分:0)

正则表达式.+中使用了贪婪的运算符。通过使用其非贪婪的形式:.+?,您将获得所有匹配。

正则表达式

<tr><td>(?<Number>[0-9.]+?)<script.+?document\.write\("":""(?<Document>[a-z+]+?)\)</script>

演示

http://regex101.com/r/eL1cP1