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
答案 0 :(得分:1)
这样做:
\ASHOW TABLE COLUMNS (?:`(?<column_name>[a-zA-Z0-9]+)`,?)+ FROM (?<table_name>[a-zA-Z0-9]+)\z
如果反引号对之间存在非字母数字字符,则会失败。
所有字母数字。预计将通过。
SHOW TABLE COLUMNS `abcdf123`,`abcdf123`,`abcdf123` FROM ABCDF123
<强> MATCHED 强>
一个反引号对之间的单个非字母数字字符。预计会失败。
SHOW TABLE COLUMNS `abcdf123`,`abcdf123*`,`abcdf123` FROM ABCDF123
没有比赛
表名中的单个非字母数字字符。预计会失败。
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子句后的文本。