从字符串中获取符号列表

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 库中获取符号列表?

我可以从 ELF 文件的符号表中的符号信息中获取对象名称吗?

Linq 从字符串列表中获取元素以及该列表中字符的位置

如何从erlang中的字符串中删除符号