什么是正则表达式对于以下模式

时间:2013-11-19 10:21:38

标签: c# regex

requrements:

1)所以基本上我需要反引号中的单词必须是[A-Za-z0-9] +

2)后面滴答中的单词数量未知但必须按顺序排列并用逗号分隔

3)在'FROM'之后,字符串必须是[A-Za-z0-9] +

这是我到目前为止所做的:

   String command = "SHOW TABLE COLUMNS `abcdf123`,`abcdf123`,`abcdf123` FROM ABCDF123";
   Match CMD = Regex.Match(command, @"SHOW(\s+)TABLE(\s+)COLUMNS(\s+)(a sequence of words enclosed in backticks seperated by a coma)(\s+)FROM(\s+)([A-Za-z0-9]+)", RegexOptions.IgnoreCase);
        if (CMD.Success)
            return true;
       else
        return false;

任何想法都会受到极大的影响我还是新手Regex

3 个答案:

答案 0 :(得分:1)

这样做:

\ASHOW TABLE COLUMNS (?:`(?<column_name>[a-zA-Z0-9]+)`,?)+ FROM (?<table_name>[a-zA-Z0-9]+)\z

Regular expression visualization

Debuggex Demo

如果反引号对之间存在非字母数字字符,则会失败。

测试1

所有字母数字。预计将通过。

SHOW TABLE COLUMNS `abcdf123`,`abcdf123`,`abcdf123` FROM ABCDF123

<强> MATCHED

测试2

一个反引号对之间的单个非字母数字字符。预计会失败。

SHOW TABLE COLUMNS `abcdf123`,`abcdf123*`,`abcdf123` FROM ABCDF123

没有比赛

测试3

表名中的单个非字母数字字符。预计会失败。

SHOW TABLE COLUMNS `abcdf123`,`abcdf123`,`abcdf123` FROM ABCDF123*

没有比赛

答案 1 :(得分:0)

考虑以下Regex ......

SHOW(\s+)TABLE(\s+)COLUMNS(\s+)(\`[\w\d]*?\`\,?)+FROM(\s+)([A-Za-z0-9]+)

祝你好运!

答案 2 :(得分:0)

匹配命令字符串的正则表达式是:

^[^`]*?`([^`]+)`+[\s\S]*?FROM\s+([a-zA-Z\d]+)[\s\S]*$


`([^`]+)` - will match data between backticks and the matching continues until
FROM is encountered.

([a-zA-Z\d]+)  - will match text after FROM clause (expecting that there is 
atlest one space after FROM)

反引号中匹配的文本可以通过使用\ 1(组1匹配)获得,并且可以通过使用\ 2(组2匹配)获得FROM子句后的文本。