찾기 및 바꾸기 대화 상자를 정규식 옵션으로 만들었습니다. 정규식을 테스트하고 모든 일치 항목을 강조 표시하는 버튼과 개별적인 일치 항목을 찾기위한 버튼이 있습니다. 정규식을 사용하면 두 메소드가 모두 동일한 일치를 만듭니다. 다른 정규식은 Regex.Match
과 일치하지 않지만 Regex.Matches
의 모음으로 예상대로 작동합니다. Regex를 지정할 때 다른 RegexOptions
을 시도했지만 원하는대로 작동하지 않는 옵션을 찾지 못했습니다.Regex.Match가 Regex.Matches와 동일한 문자열과 일치하지 않는 이유는 무엇입니까?
여기서 목표는 ButtonTestRegex
으로 정규식을 테스트 한 다음 찾기 또는 바꾸기 버튼을 사용하여 각 일치 항목을 선택할 수 있도록하는 것입니다.
1 : 나머지
중복 1 : 나머지 1의 중복의
중복 : 나머지
에서 다음을 함유하여 RichTextBox 함께
Public rtb as RichTextBox
Private Sub ButtonTestRegex_Click(sender As Object, e As EventArgs)
rtb.Select(0, rtb.TextLength)
rtb.SelectionColor = Color.Black
Dim rgx As New Regex("(duplicate of)*([0-9]:+)*")
Dim matches As MatchCollection = rgx.Matches(rtb.Text)
For Each match In matches
rtb.Select(match.index, match.length)
rtb.SelectionColor = Color.Red
Next
End Sub
Private Sub ButtonFind_Click(ByVal sender As Object, ByVal e As EventArgs)
rtb.Focus()
rtb.selectionstart = 0
rtb.selectionlength = 0
Dim rgx = New Regex("(duplicate of)*([0-9]:+)*")
Dim match As Match = rgx.Match(rtb.Text)
If match.Value <> "" Then
rtb.SelectionStart = match.Index
rtb.SelectionLength = match.Length
End If
End Sub
위의 코드는 "나머지"를 제외한 모든 텍스트와 일치합니다. ButtonTestRegex_Click()
(예상대로). ButtonFind_Click()
과 일치하는 것은 없습니다. 코드가 실행되고 있으며 일부 정규식과 함께 작동합니다. [0-9]
.
이 코드 샘플은 간략하게 표시하기 위해 생략되었습니다. 제 질문은, Regex.Match
은이 경우에 아무것도 일치하지 않지만, 왜 Regex.Matches
은 무엇입니까?
대답은 아마도 * ([0-9] : +) *'(중복) *는 빈 문자열과 일치 할 수 있습니다. 정규식. 매치를 사용하면이 방법은 모든 위치를 스캔하므로 아무런 문제가 없습니다. 문자열과 Regex.Match는 시작 부분에 선택적 패턴과 일치하는 텍스트가 없거나 문자열의 시작 부분에있는 텍스트가 선택적 패턴과 일치하는 경우 일치를 반환해야하는 경우 문자열 시작 부분과 일치합니다. 해결 방법은 비어 있지 않은 문자열과 일치하도록 패턴을 수정하는 것입니다. –