トップページに戻る
次の豆知識へ
前の豆知識へ
選択は左に記述したのを優先するかの調査
正規表現のエンジンによって異なりますが、
実際のところ、後方参照を使えればNFAなので
ほとんどの正規表現は、選択で左に記述したのを優先すると思われます。
下記の正規表現で調査
AB|ABBB|ABC
対象データ
ABC
ABBB
調査結果
EmEditor 6.00.4 左に記述したのを優先
秀丸 7.05 最長一致
サクラエディタ 1.6.2.0 左に記述したのを優先
Oracle 10.2.0.1.0 左に記述したのを優先
Oracle 11.2.0.1.0 左に記述したのを優先
VB.NET 2003 左に記述したのを優先
C# 2008 左に記述したのを優先
ruby 1.9.0 左に記述したのを優先
---Oracleの調査で使用---------------------------------------------------------
select
RegExp_Substr('ABC' ,'AB|ABBB|ABC') as str1,
RegExp_Substr('ABBB','AB|ABBB|ABC') as str2
from dual;
---VB.NETの調査で使用---------------------------------------------------------
Imports System.Text.RegularExpressions
Dim num1 As String = Regex.Match("ABC", "AB|ABBB|ABC").Value
MsgBox(num1)
Dim num2 As String = Regex.Match("ABBB", "AB|ABBB|ABC").Value
MsgBox(num2)
---C#の調査で使用---------------------------------------------------------
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
System.Console.WriteLine(Regex.Match("ABC", "AB|ABBB|ABC").Value);
System.Console.WriteLine(Regex.Match("ABBB", "AB|ABBB|ABC").Value);
}
}
---rubyの調査で使用---------------------------------------------------------
ConstRegex = /^AB|ABBB|ABC/
hairetu = Array.new
hairetu.push("ABC")
hairetu.push("ABBB")
puts "Pattern #{ConstRegex.source}"
for i in (0..hairetu.length-1)
willOut = "Line#{i+1} #{hairetu[i]} "
work = hairetu[i].scan(ConstRegex).first
if work then
willOut += "matchs " + work
else
willOut += "no match"
end
puts willOut
end
関連リンク