我需要在一条 SQL 记录中获取所有出现的特定正则表达式的列表
例如我有这样的记录:
=> 'Dear {0}, your account will expire in {1} days'
我将此字符串存储在一个表中,我想选择所有出现的“{something}”
在这个例子中:
=> {0}
{1}
我应该怎么办 ???
谢谢大家我刚刚找到了我的问题的答案
Declare @InputText nVarChar(100)
;
Select @InputText = 'Dear {Token 0}, your account will expire in {Token 1} days'
;
with Tokens AS
(
SELECT SUBSTRING(@InputText,PATINDEX('%{%',@InputText)+1,PATINDEX('%}%',@InputText)-PATINDEX('%{%',@InputText)-1) As Token
, SUBSTRING(@InputText,PATINDEX('%}%',@InputText)+1,LEN(@InputText)) As New
, PATINDEX('%{%',SUBSTRING(@InputText,PATINDEX('%}%',@InputText)+1,LEN(@InputText))) As [NextStart]
, PATINDEX('%}%',SUBSTRING(@InputText,PATINDEX('%}%',@InputText)+1,LEN(@InputText))) As [NextEnd]
Union All
Select SUBSTRING(Tokens.New,Tokens.[NextStart]+1,Tokens.[NextEnd]-Tokens.[NextStart]-1)
, SUBSTRING(Tokens.New,Tokens.[NextEnd]+1,LEN(Tokens.New))
, PATINDEX('%{%',SUBSTRING(Tokens.New,Tokens.[NextEnd]+1,LEN(Tokens.New)))
, PATINDEX('%}%',SUBSTRING(Tokens.New,Tokens.[NextEnd]+1,LEN(Tokens.New)))
From Tokens
Where Tokens.[NextStart] != 0
) Select Token
From Tokens
结果将是这样的:
=>
Token 0
Token 1
\{(\d+)\}
,但如果可能有字母、数字和下划线,那就是\{(\w+)\}