从字符串中获取符号列表
Posted
技术标签:
【中文标题】从字符串中获取符号列表【英文标题】:Get a list of symbols from a string 【发布时间】:2015-03-24 19:19:37 【问题描述】:我的请求有很大的问题。所以例如我有消息:
@NM1@ Hello @NM2@ How @NM3@ are @NM4@ you
我要提取:
@NM1@,@NM2@,@NM3@,@NM4@.
可以有多个@...@
表达式。 @..@ 之间不能是任何字符
我试过了:
group_concat(regexp(em.value,'@[a-AA-Z0-9]*@'))
但没有结果。
请帮帮我。有什么想法吗!!!!!!
【问题讨论】:
您使用的是哪个 dbms?您标记了 sql-server 和 sql-server 2008,但您尝试使用 group_concat ?? 【参考方案1】:如果这应该是一个 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开头的字符串才匹配。
如果不是这样,您想要什么,请更具体。
【讨论】:
@和@之间不能导入什么 不明白你在说什么。你想要@之间的anything,而不仅仅是以NM开头和以数字结尾的字符串吗?所以它会是 NM1,你好,NM2 ... 好的,这就是这里提取的内容。 改变了输出,所以它完全符合你想要的【参考方案2】:如果我理解正确的话- 使用这样的拆分功能(或另一个)-
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
【讨论】:
以上是关于从字符串中获取符号列表的主要内容,如果未能解决你的问题,请参考以下文章
iPhone:如何从Objective-C中的货币符号字符串中获取数字
如何从 automake/libtool 库中获取符号列表?