我的请求存在很大问题。例如,我有消息:
@NM1@ Hello @NM2@ How @NM3@ are @NM4@ you
我想提取:
@NM1@,@NM2@,@NM3@,@NM4@.
可以有多个@...@
个表达式。在@ .. @之间可以不是任何字符
我试过了:
group_concat(regexp(em.value,'@[a-AA-Z0-9]*@'))
但没有结果。
请帮帮我。任何想法请!!!!!
答案 0 :(得分:0)
如果这应该是一个PHP问题,如上所述,那么字符串可以这样找到:
<?php
$string = "@NM1@Hello@NM2@How@NM3@are@NM4@you";
preg_match_all('/@[A-Z]+[0-9]+/', $string, $matches);
print(join(",", $matches[0]))."\n";
?>
这里我假设在@之后有字母字符,后跟数字,所以只匹配示例中以NM开头的字符串。
如果不是,你想要什么,请更具体。
答案 1 :(得分:0)
如果我理解你 - 使用像这样(或另一个)的分割函数 -
CREATE FUNCTION [dbo].[fnSplitString]
(
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(splitdata NVARCHAR(MAX)
)
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1
INSERT INTO @output (splitdata)
VALUES(SUBSTRING(@string, @start, @end - @start))
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)
END
RETURN
END
然后使用此代码
SELECT left(splitdata,len(splitdata)-1) AS substr
INTO #x1
FROM [dbo].[fnSplitString] ('@NM1@ Hello @NM2@ How @NM3@ are @NM4@ you',' ')
WHERE splitdata LIKE '@%' AND splitdata LIKE '%@'
--SELECT * FROM #x1
GO
DECLARE cur CURSOR FAST_FORWARD READ_ONLY
FOR SELECT substr
FROM #x1
DECLARE @str varchar(100)=''
DECLARE @i varchar(10)
OPEN cur
FETCH NEXT FROM cur INTO @i
WHILE @@FETCH_STATUS=0
BEGIN
SET @str = @str+@i+','
FETCH NEXT FROM cur INTO @i
END
CLOSE cur
DEALLOCATE cur
SELECT left(@str,len(@str)-1)
DROP table #x1