トップページに戻る
次の正規表現パズルへ
前の正規表現パズルへ
9-3 可変長戻り読みで連立不等式
正規表現パズル
行頭から見て2回目に出現した文字列STARTから文字列ENDまで検索する。
こちらを参考にさせていただきました
検索結果
START111END222START333END
^^^^^^^^^^^
START111START222END333
^^^^^^^^^^^
START111END222START333END444START555END
^^^^^^^^^^^
XXXXXXXXXX
no match
対象データ
START111END222START333END
START111START222END333
START111END222START333END444START555END
XXXXXXXXXX
正規表現
(?<=START.*)(?<!START.*START.*)START.*?END
解説
数学の連立不等式(同値命題)
Xは1以上の自然数である。かつ、Xは2以上の自然数でない。 ⇔ X=1
を使っています。
3-18 指定文字列がn回
VB2003でのソースと実行結果
Imports System.Text.RegularExpressions
Module Module1
Sub Main()
Dim array(3) As String
array(0) = "START111END222START333END"
array(1) = "START111START222END333"
array(2) = "START111END222START333END444START555END"
array(3) = "XXXXXXXXXX"
Const matchPattern As String = "(?<=START.*)(?<!START.*START.*)START.*?END"
Console.WriteLine("Pattern " & matchPattern)
For i As Integer = 0 To array.GetUpperBound(0)
Dim willOut As String = array(i)
If Regex.IsMatch(array(i), matchPattern) Then
Dim matchStr As String = Regex.Match(array(i), matchPattern).Value
willOut &= " matchs " & matchStr
Else
willOut &= " no match"
End If
Console.WriteLine(willOut)
Next i
Console.ReadLine()
End Sub
End Module
実行結果
----------------------------------------------------------
Pattern (?<=START.*)(?<!START.*START.*)START.*?END
START111END222START333END matchs START333END
START111START222END333 matchs START222END
START111END222START333END444START555END matchs START333END
XXXXXXXXXX no match