[英]Having some trouble with Regex
好的,我有這個:
$fromArray = array(
"/(\[color=)(.+)(\])/",
"(\[\/color\])");
$toArray = array(
"<span style=\"color:\\2\">",
"</span>");
它應該做的是匹配所有[color = to。
我正在運行它,但這是源輸出:
<span style="color:red]RED<b>BOLD</b>RED[/color">
當我試圖跑
[color=red]RED[b]BOLD[/b]RED[/color]
通過它。
這是怎么回事? 我不太了解正則表達式,這是我的第一個正則表達式。 但我只是無法弄清楚為什么它會創建那些不起作用的丑陋源代碼:(
有人知道嗎?
謝謝 :)
**如果有人沒有IDEA我想用它做什么(很不清楚:),這是它:
將[color = red]翻譯為<span style="color:red;">
將[/ color]翻譯為</span>
。
現在我需要單獨進行這些操作,如果我將它們作為一個正則表達式模式進行操作,它將會解決另一個需要幾天解釋的問題:\\
使用非貪婪量詞:
$fromArray = array(
"/(\[color=)(.+?)(\])/",
"(\[\/color\])");
發生的事情是你的開始標記的正則表達式實際上是吞噬了開始標記,中間的東西和結束標記,因為.+
貪婪並盡可能地匹配,所以\\]
實際上匹配了在關閉標記的末尾括號。
非貪婪的版本, .+?
,盡可能少地匹配,同時仍允許正則表達式匹配,因此將確保僅匹配打開的標記。
考慮到Amber的答案,你也可以像這樣運行一行/匹配:
$subject = '[color=red]RED[b]BOLD[/b]RED[/color]';
$result = preg_replace('%\[color=([#a-g0-9]+)\](.+?)\[/color\]%im', '<span style="color:$1">$2</span>', $subject);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.