簡體   English   中英

多個組而不是一個

[英]Multiple groups instead of one

我正在嘗試匹配URL,到目前為止,它工作得很好–除了我得到了多個組之外。 如果可以的話,我想參加一個小組。 我的目標是使地址一直到單個(正)斜線。

例如,給定此URL

http://docs.oracle.com/javase/8/docs/technotes/guides/install/windows_jdk_install.html#BABGDJFH

輸出將是:

http://docs.oracle.com

另外要注意的是,有時開頭的httphttps不存在。 但它是可選的,無論如何我都不需要它。

我正在使用的當前正則表達式

 ^(https?:\/\/)?([\da-z\.-]+)([a-z\]{2,6})([\/\w \.-]*)

第一組是可選的,這意味着URL可以以httphttps開頭,也可以都不以。 其余的用於域名本身。 當我運行上面的正則表達式時,我得到了我需要的東西,但是又回到了更多的組中; 我只想參加一組。 如果開頭是httphttps ,則它是一個組,然后站點地址是另一個組。

用於測試目的

  Dim regex As Regex = New Regex("^(https?:\/\/)?([\da-z\.-]+)([a-z\]{2,6})([\/\w \.-]*)")
  Dim m As Match = regex.Match(txtURL.Text.Trim)
  Dim lst As New List(Of String)

  Do While m.Success
      For i = 1 To 2
          Dim g As Group = m.Groups(i)
          lst.Add(g.ToString)
      Next
      Exit Do
  Loop

  ' Jump through hoops to account for one or two groups.
  If lst.Count = 1 Then
      txtConvertedURL.Text = (lst(0))
  ElseIf lst.Count = 2 Then
      txtConvertedURL.Text = (lst(0) & lst(1))
  End If

您可以使用外部分組來實現此目的:

Dim regex As Regex = New Regex("^((https?:\/\/)?([\da-z\.-]+)([a-z]{2,6}))([\/\w \.-]*)")
'                                ^                                       ^
Dim m As Match = regex.Match(txtURL.Text.Trim)
Dim lst As New List(Of String)

Do While m.Success
    For i = 1 To 2
        Dim g As Group = m.Groups(i)
        lst.Add(g.ToString)
    Next
    Exit Do
Loop

If lst.Count > 1 Then
    txtConvertedURL.Text = (lst(0))
End If

編輯:

@Jasen和我同時回答:關於仍然有多個小組的他所說的話,但第一個小組是您想要的全部比賽。

同樣 ,我在對Jasen的答案的評論中指出的ArgumentException最終下降到問題原始模式中的[az\\]中的反斜杠(一旦引入了其他括號,盡管是平衡的)。 綁回到問題的原始語言(“......一路攀升到一個反斜杠。”),在\\[az\\]不作(明顯)感覺-當然不是相對於樣品輸入網址在這個問題上。

當然,單個斜杠而不是反斜杠將指示URL中主機/域的結尾; \\/([\\/\\w \\.-]*)隨后為該帳戶:內的反斜杠[az\\]在原有的模式,然后似乎錯誤:我在更新的答案產生所需的輸出把它丟提供的樣本輸入。

在各組之間加上括號:

^((https?:\/\/)?([\da-z\.-]+)([a-z\]{2,6}))([\/\w \.-]*)

您仍然會獲得多個組,但是第一個組將是協議和域

順便說一句,該正則表達式今年停止工作。 TLD不再限於6個字符。 請抱怨給誰的人。

失去“ 6”,它會更好地工作

^((https?:\/\/)?([\da-z\.-]+)([a-z\]{2,}))([\/\w \.-]*)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM