[英]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.