下のようになるのですが、一つポイントを言うと、\でエスケープしている方は、すごく\が多いですが、
正規表現では\を2個連続で表現しなくてはならず、またC#では\は2個連続でエスケープしなくてはならないので、\が4個連続します。
クォテーションで囲まれたCSVのデータを抜き出すのにも使えます。
C#
private string TEXT07 = "'あさ','ひ''る','''よる'";
private string TEXT08 = "'あさ','ひ\'る','\'\'よる'";
private string TEXT09 = "\"あさ\",\"ひ\\\"\\\"る\",\"\\\"\\\"よる\"";
Regex r16 = new Regex("('([^']*(''[^']*)*)')");
MatchCollection m16 = r16.Matches(TEXT07);
foreach (Match m in m16)
{
this.textBox1.Text += "m16:" + m.Groups[1].Value + "\r\n";
}
Regex r17 = new Regex("('[^\\\\']*(\\\\.[^\\\\']*)*')");
MatchCollection m17 = r17.Matches(TEXT08);
foreach (Match m in m17)
{
this.textBox1.Text += "m17:" + m.Groups[1].Value + "\r\n";
}
Regex r18 = new Regex("(\"([^\\\\\"]*(\\\\.[^\\\\\"]*)*)\")");
MatchCollection m18 = r18.Matches(TEXT09);
foreach (Match m in m18)
{
this.textBox1.Text += "m18:" + m.Groups[1].Value + "\r\n";
}
/*結果
m16:'あさ'
m16:'ひ''る'
m16:'''よる'
m17:'あさ'
m17:'ひ\'る'
m17:'\'\'よる'
m18:"あさ"
m18:"ひ\"\"る"
m18:"\"\"よる"
*/
VB.NET
Private TEXT07 As String = "'あさ','ひ''る','''よる'"
Private TEXT08 As String = "'あさ','ひ\'る','\'\'よる'"
Private TEXT09 As String = """あさ"",""ひ""""る"",""""""よる"""
''で囲まれていて、途中に2個連続の'のエスケープを認識するタイプ
Dim r16 As Regex = New Regex("('([^']*(''[^']*)*)')")
Dim m16 As MatchCollection = r16.Matches(TEXT07)
For Each m As Match In m16
Me.TextBox1.Text += "m16:" & m.Groups(1).Value & vbCrLf
Next
''で囲まれていて、途中に\を使った'のエスケープを認識するタイプ
Dim r17 As Regex = New Regex("('[^\\']*(\\.[^\\']*)*')")
Dim m17 As MatchCollection = r17.Matches(TEXT08)
For Each m As Match In m17
Me.TextBox1.Text += "m17:" & m.Groups(1).Value & vbCrLf
Next
'"で囲まれていて、途中に2個連続の"のエスケープを認識するタイプ
Dim r18 As Regex = New Regex("(""([^""]*(""""[^""]*)*)"")")
Dim m18 As MatchCollection = r18.Matches(TEXT09)
For Each m As Match In m18
Me.TextBox1.Text += "m18:" & m.Groups(1).Value & vbCrLf
Next
'結果
'm16:'あさ'
'm16:'ひ''る'
'm16:'''よる'
'm17:'あさ'
'm17:'ひ\'る'
'm17:'\'\'よる'
'm18:"あさ"
'm18:"ひ""る"
'm18:"""よる"
| 良い | やや良い | 普通 | やや悪い | 悪い |
|---|
| 投稿日時 | 評価 | コメント |
|---|