正则表达式:获得所有匹配直到某个角色

时间:2015-07-02 09:27:05

标签: regex

我希望在任何字符出现之前从文本中获取“this”值。

例:
文字:

start[hello:"", world:"", dsdsd:"", this:"a", wqewq:"", this:"b"], fdsfds, this:"c"  

预期:

a, b

https://regex101.com/r/eZ7nN8/3

PS:我经常尝试并且非常沮丧。

3 个答案:

答案 0 :(得分:0)

提取任何非空的'这个' CREATE PROCEDURE #TypeOfvalue (@code nvarchar(max)) AS BEGIN DECLARE @result int BEGIN TRY EXEC(N'SET PARSEONLY ON;SET NOEXEC ON;'+@code+N';SET NOEXEC OFF;SET PARSEONLY OFF;') PRINT(N'Statement') SET @result = 1 END TRY BEGIN CATCH PRINT(N'CSV') SET @result = 2 END CATCH RETURN @result END GO DECLARE @returnCode int EXECUTE @returnCode = #TypeOfvalue @code = N'abc;' SELECT @returnCode as returned -- 2 (CSV) EXECUTE @returnCode = #TypeOfvalue @code = N'SELECT * FROM sys.all_objects' SELECT @returnCode as returned DROP PROCEDURE #TypeOfvalue -- 1 (SELECT) 之前的值,您可以使用

]

请参阅demo,您的值在第1组。

\bthis:"([^"]+)(?=[^\]]*]) 子模式检查在由一个或多个符号组成的非引号\bthis:"字符串之前是否有this:",并且([^"]+)先行检查是否存在(?=[^]]*])之前]以外的一系列字符。

答案 1 :(得分:0)

你需要使用积极的先行断言。

\bthis:\"([^"]+)\"(?=[^\]]*\])

DEMO

然后从组索引1中获取所需的字符串。

答案 2 :(得分:0)

如果你使用的是pcre正则表达式引擎(php,R)或perl,你可以使用这种模式:

this:"\K[^"]+(?=")|](*COMMIT)(*F)

demo

此处使用

\K和前瞻(?=")来避免创建捕获组。 \K删除整场比赛左边的所有内容。所以整个匹配只包含引号之间的内容。

如果模式稍后失败,则回溯控制动词(*COMMIT)会强制整个匹配失败。由于(*F)使模式失败,因此在达到]时停止研究。