私は次のパターンのための正規表現を記述しようとしている:特定の文字列の後に任意の数の文字を含む数字を見つける方法は?
[MyLiteralString] [0以上の文字制限なし] [少なくとも1桁]
私は、これはそれを行う必要があると思いました:
(theColumnName)[\s\S]*[\d]+
それは、任意の文字数(空白または他の方法で)、次いで少なくとも一つの数字が続くリテラル文字列theColumnName
、探しよう。しかし、これはあなたがここに見ることができるように、私は必要以上に一致します。
https://www.regex101.com/r/HBsst1/1
(EDIT)より複雑なデータの第二セット - そのリンクでのサンプルデータを使用してhttps://www.regex101.com/r/h7PCv7/1
、私は正規表現をしたいですtheColumnName] VARCHAR(10)
の2つの出現を識別します。
私は、プロシージャ、テーブル、トリガ、インデックス、関数 - すべてのデータベースオブジェクトの種類ごとにcreateステートメントを含む300以上のsqlスクリプトを持っています。そのため、正規表現はあまり厳しくできません。
ストアドプロシージャのファイルには、識別したいLEFT(theColumnName, 10)
のようなテキストが含まれている可能性があります。
create table文はtheColumnName VARCHAR(12)
のようになります。
数字が常に同じではないので、非常に柔軟性が必要です。ときどき10、ときには12、時には51であり、すべての種類が異なっています。
基本的に、私はこのC#コードの正規表現と同等を探しています:
//Get file data
string[] lines = File.ReadAllLines(filePath);
//Let's assume the first line contains 'theColumnName'
int theColumnNameIndex = lines[0].IndexOf("theColumnName");
if (theColumnNameIndex >= 0)
{
//Get the text proceeding 'theColumnName'
string temp = lines[0].Remove(0, theColumnNameIndex + "theColumnNameIndex".Length;
//Iterate over our substring
foreach (char c in temp)
{
if (Char.IsDigit(c))
//do a thing
}
}