正则表达式模式格式验证

时间:2017-01-24 10:18:34

标签: java regex regex-negation regex-lookarounds

我需要一个RegEx模式,它将由客户端发送,其中起始字符将是字母数字,此起始字符串的长度将由此字符串后面的数字定义。接下来是一个特殊字符,它始终是一个字符。接下来是一个可变长度的字母数字字符串。

我最接近下面的String和格式。

[A-Za-z0-9]{4}-[A-Za-z0-9]{5}         - RegEx Input String

[A-Za-z0-9]{2}#[A-Za-z0-9]{6}         - RegEx Input String

[0-9]{3}#[0-9]{5}                     - RegEx Input String

[a-z]{5}#[a-z]{5}                     - RegEx Input String

[A-Z]{4}#[a-z]{4}                     - RegEx Input String

[\w]{\d{1,1}}(\S{1,1})[\w]{\d{1,1}}   - RegEx Format

上述模式和格式是否正确?

我们可以根据所需的RegEx格式验证RegEx输入字符串吗?

这是一个Web服务,其输入为[A-Za-z0-9] {4} - [A-Za-z0-9] {5}。我这里需要两件事。首先,如何验证此输入以查看它是否与我想要的格式和继续进行匹配。格式是我上面提到的RegEx格式。

1 个答案:

答案 0 :(得分:0)

此正则表达式应与您感兴趣的正则表达式子集匹配:

Option Explicit

Sub CopyRows()

Dim Cl As Range
Dim str As String
Dim RowUpdCrnt As Long

str = "WRK.*" 'string to look for
Sheets("Feb").Range("B5:B81").Value = ""

RowUpdCrnt = 5

' In my test data, the "WRK."s are in column AN.  This For-Each only selects column AN.
' I assume all my "WRK."s are in a single column.  Replace "B" by the appropriate
' column letter for your data.

With Sheets("Jan")
' loop until last row with data in Column AN (and not the entire column) to save time
  For Each Cl In .Range("AN1:AN" & .Cells(.Rows.Count, "AN").End(xlUp).Row)
    If Cl.Value Like str And Sheets("Feb").Range(Cl.Address).Value <> "" Then

    'if the cell contains the correct value copy it to next empty row on sheet 2 &  delete the row
      If Not IsError(Application.Vlookup(.Range("B" & Cl.Row).Value, Sheets("Master").Range("H7:H200"), 1, 0)) Then   ' <-- verify the VLookup was successful
        Sheets("Feb").Range("B" & RowUpdCrnt).Value = Application.Vlookup(.Range("B" & Cl.Row).Value, Sheets("Master").Range("H7:H200"), 1, 0)
        RowUpdCrnt = RowUpdCrnt + 1
      End If
    End If
  Next Cl
End With

Application.CutCopyMode = False
End Sub

让我们分解一下:

  • 它匹配一行,其中包含一个字符类,一个可选的量词,一个分隔符,一个第二个字符类及其第二个可选的量词
  • 分隔符是任何非空白字符\[(?:[a-zA-Z0-9](?:-[a-zA-Z0-9])?)*\](?:\{\d\})?\S\[(?:[a-zA-Z0-9](?:-[a-zA-Z0-9])?)*\](?:\{\d\})? (您可能希望将其更改为更具体的字符,或者包含一些空格)
  • 可选的量词很容易,它是一个用文字大括号括起来的数字,整个数据包含在我们用来使其成为可选的未绑定组中:\S。请注意,这不会接受多位数长度,因此您可能希望将(?:\{\d\})?更改为\d,也不要将更具体的\d+范围量词更改。
  • 字符类是由0或更多字符或字符范围组成的序列,用文字括号括起来。
  • 字符是字母或数字:{m,n}当无界群组不匹配时
  • 字符范围是一个字符,后跟文字[a-zA-Z0-9](?:-[a-zA-Z0-9])?后跟另一个字符:-当无限组匹配时