對於正則表達式,我似乎有一個心理障礙,所以我希望你能幫助我。帶分隔符和可選部分的正則表達式
我有了這種格式
.* :: .* :: .*
但有時像這樣的字符串:
.* :: .*
我想捕捉的第一2組字符,這樣
(.*) :: (.*) :: .*
但我不知道如何修改我的表達式,以便last ::和characters是可選的。我嘗試過使用圓括號和?
,但我無法按需要使其工作。
感謝
對於正則表達式,我似乎有一個心理障礙,所以我希望你能幫助我。帶分隔符和可選部分的正則表達式
我有了這種格式
.* :: .* :: .*
但有時像這樣的字符串:
.* :: .*
我想捕捉的第一2組字符,這樣
(.*) :: (.*) :: .*
但我不知道如何修改我的表達式,以便last ::和characters是可選的。我嘗試過使用圓括號和?
,但我無法按需要使其工作。
感謝
Got it!
(.*?) :: (.*?(?= :: |$))
這裏是它如何工作的故障:
- >隔離了首批人物前第一::並將其保存到組$ 1中。
(.*?)
- >接下來,這個塊做了兩件事。首先,它使用。*?獲得第二批人物。在此之後,零寬度正向先行斷言(?= :: | $)要求字符以另一個::或$爲結尾的文本結束,但不包括它們在匹配組中,這意味着只有第二批字符被保存到$ 2。
(.*?(?= :: |$))
我在Objective-C測試針對這些串的成功:
這就是@Petar伊萬諾夫最初的建議,但你可以通過我的第一個評論看到,它並沒有工作。 – coopersita
我能夠在Objective-C中測試時找到完全符合您要求的RegEx,請參閱我的修訂答案。 – Anton
是的,這完全做到了。你是個天才!謝謝! – coopersita
這是你想要什麼:
([^:]*) :: ([^:]*) (:: ([^:]*))?
拍攝的組訪問,然後是1,2和4(4可能是空的)。
編輯:
的.*?
是非貪婪.*
,即它儘可能少的通配符匹配越好。 這會阻止第一組匹配前兩種模式。
如果您知道該模式不包含:
,另一種選擇是將.*
替換爲[^:]*
。
關閉,但第一組和第二組合併成一個。 1是'。* ::。*',2是最後一個'。*'。它只有在最後一個模式丟失時才能正常工作。 – coopersita
嗯,是的,我看...讓我改正它然後 –
更接近,但現在2只捕獲第一個字... – coopersita
這樣的事情呢?其次::
(.* ::){2}(?:::)?
比賽兩件事情,最後能有一個可選的::
。
也關閉,但它只適用於我有3組字符和2個分隔符。它還在我的字符串末尾附加了'::'。 – coopersita
請在下面查看我的修改答案。我得到它的工作和充分測試。與其他答案不同,它還允許single:在沒有問題的字符串中,只查找double ::。 – Anton