2014-09-24 75 views
0

我目前被困在正則表達式中。我試圖獲取一個BBCode的,具有可選的PARAMS,也許不同符號的內容:正則表達式爲可選參數的BBCode

[tag]https://example.com/1[/tag] 
[tag='https://example.com/2'][/tag] 
[tag="http://another-example.com/whatever"][/tag] 
[tag=ftp://an-ftp-host][/tag] 
[tag='https://example.com/3',left][/tag] 
[tag="https://example.com/4",right][/tag] 
[tag=https://example.com/5][/tag] 
[tag=https://example.com/i-need-this-one,right]http://example.com/i-dont-need-this-one[/tag] 

第二屆PARAM正好可以向左或向右,如果這是送給我需要的URL從第一PARAM。否則,我需要標籤之間的一個。

作爲參數的url可以被包裝在'"或不包含任何這些。

我現在的正則表達式是這樣的:

~\[tag(?|=[\'"]?+([^]"\']++)[\'"]?+]([^[]++)|](([^[]++)))\[/tag]~i

然而,這其中也包括在比賽名單的第二個PARAM和東西多了很多,我不想匹配。

有什麼建議嗎?

+0

你能分別突出顯示每個實例和你喜歡匹配的順序嗎?這可能不像你想象的那麼簡單。 – sln 2014-09-24 22:53:10

+0

每個第一個網址。就這樣。 – user2748261 2014-09-24 23:08:34

回答

1

我做了一些改變,做你想做的。

你的:我已經在這裏爲便於比較,包括你的版本http://regex101.com/r/dE4aE4/1

\[tag(?:=[\'"]?(.*)[\'"]?)?]([^]]*)?\[/tag] 

礦:http://regex101.com/r/dE4aE4/3

\[tag(?:=[\'"]?([^,]*?)(?:,[^]'"]+)?[\'"]?)?]([^\[]+)?\[/tag] 

觀察,我已經改了一下,以獲得URL沒有昏迷(,):從(.*)([^,]*?)(?:,[^]'"]+)?

我也修復了內容部分:從([^]]*)?([^\[]+)?

+0

似乎工作。任何想法,是什麼導致這些空的第二場比賽?我剛剛注意到,頁面上的正則表達式比我試過的另一個正則表達式更優先:P – user2748261 2014-09-24 22:41:26

+0

固定。這是內容匹配中的*。將其更改爲+並完成。 – rcdmk 2014-09-24 22:44:25

+0

謝謝:)看起來像解決方案,我正在尋找。但還有一件事:我不明白,爲什麼第一個標籤匹配2而不是1。這可能嗎? – user2748261 2014-09-24 22:51:09