Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何找到一个后跟数字的特定字符串,该字符串之间有任意数量的字符?_Regex - Fatal编程技术网

Regex 如何找到一个后跟数字的特定字符串,该字符串之间有任意数量的字符?

Regex 如何找到一个后跟数字的特定字符串,该字符串之间有任意数量的字符?,regex,Regex,我正在尝试为以下模式编写正则表达式: [MyLiteralString][0个或多个字符(不受限制)[至少1位] 我想这应该可以做到: (theColumnName)[\s\S]*[\d]+ 当它查找文本字符串时,列名,后跟任意数量的字符(空格或其他),然后至少是一个数字。但这比我想要的要多,你可以在这里看到: (编辑)第二组更复杂的数据- 使用该链接中的示例数据,我希望正则表达式能够识别两次出现的theColumnName]VARCHAR(10),仅此而已 我有300多个sql脚本,其中包

我正在尝试为以下模式编写正则表达式:

[MyLiteralString][0个或多个字符(不受限制)[至少1位]

我想这应该可以做到:

(theColumnName)[\s\S]*[\d]+
当它查找文本字符串
时,列名
,后跟任意数量的字符(空格或其他),然后至少是一个数字。但这比我想要的要多,你可以在这里看到:

(编辑)第二组更复杂的数据-

使用该链接中的示例数据,我希望正则表达式能够识别两次出现的
theColumnName]VARCHAR(10)
,仅此而已

我有300多个sql脚本,其中包含每种类型的数据库对象的create语句:过程、表、触发器、索引、函数——一切。正因为如此,我对正则表达式不能太严格

存储过程的文件可能包括我想要识别的
LEFT(columnname,10)
之类的文本

CREATETABLE语句类似于
columnname VARCHAR(12)

因此,它需要非常灵活,因为数字并不总是相同的。有时候是10,有时候是12,有时候是51——各种各样的数字

基本上,我在寻找这个C代码的正则表达式等价物:

这将使它在看到第一个数字后停止捕获

*
*?
之间的区别在于贪婪与懒惰<例如,code>*\d将匹配
abcd12ad4
中的
abcd12ad4
,而
*?\d
将其第一个匹配项设置为
abcd1
。查看更多信息

顺便说一句,如果您不想匹配换行符,请使用
(句点)而不是
[\s\s]

这将使它在看到第一个数字后停止捕获

*
*?
之间的区别在于贪婪与懒惰<例如,code>*\d将匹配
abcd12ad4
中的
abcd12ad4
,而
*?\d
将其第一个匹配项设置为
abcd1
。查看更多信息

顺便说一句,如果您不想匹配换行符,请使用
(句点)而不是
[\s\s]

//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
    }
}
(theColumnName).*?[\d]+