最初的问题是确定原始列来自逗号分隔的列列表中的哪些列,这些列可以是别名。此列表不在SQL中的任何选择块中,因为语法几乎相同。我正在使用MSSQL。我的Regex应该使用C#代码!所以我开始匹配列之间的内容。然后我指定内容的末尾应该是用括号括起来的类似"列"的内容(或者"当内容多于乘空格时")。而这个结局必须是准确的。因此,bla作为blacolumn,不是我试图获得的有效匹配(get意味着在这种情况下读取匹配值以进行更多编辑)。只有当没有附加信息时,值的匹配才应该是值本身:
SELECT
text
FROM
bla
否则,只有信息应该匹配,而没有"文本":
SELECT
bla.t as text
FROM
bla
或
SELECT
t as text
FROM
bla
所以我得到了一个小例子,我强调了应该匹配的内容:
从中选择文本
从中选择bla.t作为文本
从中选择t作为文本
从中选择bla.tatext
选择bla来自的文本
从中选择bla.t作为statext
从中选择bla.t作为文本
从中选择bla.t作为statext,bla.t为text
,textFROM(选择bla.text FROM)作为bla
,来自的"文本"
,[text]来自
,bla.t为"文本",
只要复制这个例子,试着把所有的东西都弄清楚。与匹配
祝你好运!
我不确定我是否理解这个问题。听起来你只需要
,([^,]*?text),
这将匹配一个逗号、0个或多个以text
结尾的非逗号字符和另一个逗号。由于只有逗号之间的文本在括号中,所以这就是将要捕获的全部内容。
如果你不想在比赛中包括text
,你可以做
,([^,]*?)text,
或者,如果你不想使用捕获并坚持环视:
(?<=,)(.*?)(?=text,)
详细信息将取决于您正在使用的regex语言。
使用此模式
(?<=,)(.*?)(?<=text)(?=,)
我也不是专家,但这能满足你的需求吗?
text(?=,)
这在你想要的关键词后面使用了一个正向前瞻(?=,)。
如果你只想要逗号之间的关键词,你可以给我们一个lookhead和lookback:
(?<=,\s*)文本(?=,)