RegEx
のパターンマッチングのためにCLR
アセンブリを使用しています。私が持っているアセンブリはとてもシンプルです。誤ったデータを見つけようとしているパターンが、期間を許さないと私は信じています。ただし、ピリオドを含むデータはCLR-based UDF
によって返されません。RegExパターンマッチングは期間が可能です
無効なデータがパターンを更新する可能性があることがわかりましたが、パターンはサードパーティのXMLスキーマからのものであり、使用しているパターンを変更することはできません。
私は、パターンによってどのキャラクタを取り上げるべきか、またはすべきではないかを検証する手段としてhttp://regexr.com/を使用してきました。以下のシナリオでは、ウェブサイトを使用しているときにパターンによってピリオド文字が有効ではありません。
私の実装で何か不足していますか?
文字列データ:照合さTEST. DATA
パターン:'([A-Za-z] ?)*[A-Za-z]'
正規表現CLRクラスメソッド:
[SqlFunction(IsDeterministic = true, IsPrecise = true)]
public static bool RegExMatch(string pattern, string matchString)
{
if (string.IsNullOrEmpty(matchString) || string.IsNullOrEmpty(pattern))
return false;
Regex r1 = new Regex(pattern.TrimEnd(null));
return r1.Match(matchString.TrimEnd(null)).Success;
}
テST SQLコード:
SELECT 'TEST. DATA' AS TEST_STRING
, dbo.RegExMatch('([A-Za-z] ?)*[A-Za-z]', 'TEST. DATA') AS PatternMatch
このパターンは、入力テキストがアルファベット文字で終わることを実際に主張するだけです。あなたが '... a'をウェブサイトに置くと、成功したマッチが表示されます。 Regexパターンを更新できない場合は、何を提案するか分かりません。パターンにアンカーを追加すると、複数行のマッチングを行っているかどうかのニュアンスがわかります。'^ [A-Za-z] * [A-Za-z] $' – Jay
ユーザ定義の正規表現を取得して*文字列全体*とマッチさせたい場合は、アンカーだけでなく外側グループ化。 '' $ ''、 'TEST。DATA') '' dbo.RegExMatch(CONCAT( '^:?'、 '(A-Za-z)?)* [A-Za-z]'、 ')$'を試してください。正規表現に交替演算子が含まれていると、それ以外の場合は破棄されます。 –
[成功](https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.group.success(v = vs.110).aspx)プロパティは、見つかった場合はtrueを返します一致し、[this](https://regex101.com/r/7dXE9j/1)によると、2つのマッチがあります。あなたがパターンを変えることができないと考えて、これを回避する方法を言うのは難しいです。あなたが渡されているサードパーティの正規表現のパターンは、真偽検証のために単に一致するだけでは不十分なので、あなたが "検証する"ものをより正確に定義する必要があると思います。 – Quantic