[英]match until regex expression not working correctly
我有這個正則表達式應該匹配1 ='aa'或1 =“ aa”或1 = aa,並返回數字/值。
(?<number>\d)=\s*("|')?\s*(?<value>.*?)(?=("|')?\d=|$)
它可以工作,但是返回的值不正確。 在1 =“ aa”的情況下,數字返回為1,但值返回為aa“
對於1 =“ aa”的情況,如何獲得value = aa。
實際表達式可能包含1 ='aa'2 =“ bb” 3 = cc等。
這里的主要問題是:
(?=("|')?\d=|$)
表示“以下任何一項:
"
加一個數字加=
'
加一個數字加=
=
“。您會注意到, "
或'
與數字之間沒有空格。 因此,在的情況下, 1="aa" 2=...
,的value
簡單地不允許后跟" 2=...
,同樣地,它不會使任何津貼"
或'
加結束OF-串。
因此,最小的解決方法是在數字前允許(不, 要求 )一些空格,並將("|')?
從前瞻性斷言移至正則表達式的主要部分:
("|')?(?=\s+\d=|$)
贈送:
(?<number>\d)=\s*("|')?\s*(?<value>.*?)("|')?(?=\s+\d=|$)
在進行此操作時,我們還可以進行其他一些調整以簡化正則表達式並減少可能出錯的情況:
(?<number>\d)=\s*(["']?)(?<value>.*?)\1(?=\s+\d=|$)
(可能還可以進行進一步的清理,但是我對您的數據了解不足,無法建議您進行其他更改。)
把事情簡單化。 精確匹配一對引號(最簡單的方法)是(如下所示,它們是相同的,例如: 1='aa"
):
(
(
(?P<number>\d)="(?P<value>[^"]+)" #or * in stead of + if value can be empty
) |
(
(?P<number>\d)='(?P<value>[^']+)' #or * in stead of + if value can be empty
) |
(
(?P<number>\d)=(?P<value>[^\s]+) #here you should also choose where you stop
)
)
嘗試
(?<number>\d)=\s*("|')?\s*(?<value>.+?)("|')?(\s|$)
如果分配后跟空格或行尾,它將起作用。
其他要考慮的項目:
對可選字符使用方括號可以避免不必要的捕獲組
(?<數> \\ d +)\\ S * = \\ S * [ “']?(?<值> [^” '\\ S] +)[“']?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.