簡體   English   中英

Ruby Regexp匹配匹配重復值

[英]Ruby Regexp match matching repetitive values

我在Ruby Regexp比賽中遇到一些問題。

我有以下查詢,我想掃描我的參數:

EXEC sp_executesql N'exec dbo.MyProcedure @UserID=@p0,@Products=@p1,@CountryCodes=@p2'
    , N'@p0 int,@p1 nvarchar(max) ,@p2 nvarchar(max)'
    , @p0 = 123569
    , @p1 = N'1633,1634'
    , @p2 = N'39A,CS,DE,ES,FR,GB,IT,NL,AB,BS,BU,CR,ET,FI,HU,LA,LT,MD,ME,MV,PL,RO,RS,SK,SV,GR,PT,TR,AT,CH,LI,GG,KS,UK,GI,MN,RR,CY,MT,BL,RU,DK,NO,SE,BE,IC,IE,LX'

我剛剛將查詢格式化為看起來整潔和可讀。 在我的資料中,制表符和空格較少。

理想情況下,我希望獲得三場比賽:

@p0 = 123569
@p1 = N'1633,1634'
@p2 = N'39A,CS,DE,ES,FR,GB,IT,NL,AB,BS,BU,CR,ET,FI,HU,LA,LT,MD,ME,MV,PL,RO,RS,SK,SV,GR,PT,TR,AT,CH,LI,GG,KS,UK,GI,MN,RR,CY,MT,BL,RU,DK,NO,SE,BE,IC,IE,LX'

但是,我的Regexp模式合並了@ p1和@ p2,這就是我得到的:

@p0 = 123569
@p1 = N'1633,1634',@p2 = N'39A,CS,DE,ES,FR,GB,IT,NL,AB,BS,BU,CR,ET,FI,HU,LA,LT,MD,ME,MV,PL,RO,RS,SK,SV,GR,PT,TR,AT,CH,LI,GG,KS,UK,GI,MN,RR,CY,MT,BL,RU,DK,NO,SE,BE,IC,IE,LX'

我可以看到問題出在哪里,但是我對Regexp還是很陌生,我無法弄清楚如何正確編寫它。 這是我的表情:

(\@p[0-9]+)+\=(\N\'.*\'|[0-9]+|NULL)

我在這里測試我的Regex表達式: http : //rubular.com/r/OF5EVD5Nau

您的主要問題是第二個替換中的.*部分,默認情況下正則表達式是貪婪的並且盡可能地匹配。

您可以通過添加?將它變成懶惰或不滿意? 在重復運算符之后。

因此,只需做很少的更改即可:

(@p[0-9]+)\s+=\s+(\d+|N'.+?'$|NULL)

例子

您對空格的描述有些未知,我將+用作重復運算符,假設在=號前后至少存在1個,如單引號中所示,我假定它們永遠都不為空。 如果它們是可選的,則替換為*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM