作爲項目的一部分,我需要分析其可以包含以下面的方式來PHP參考串:正則表達式[PHP]代碼[/ PHP]
[php]functionName(args1, args2)[/php]
函數名並不總是相同的,我想用另一個值替換上例中的所有內容(包括僞標籤)。
任何人都可以建議一個正則表達式來有效地匹配模式[php]anything[/php]
。
對不起,如果這是一個基本的問題,但我吮吸正則表達式!
作爲項目的一部分,我需要分析其可以包含以下面的方式來PHP參考串:正則表達式[PHP]代碼[/ PHP]
[php]functionName(args1, args2)[/php]
函數名並不總是相同的,我想用另一個值替換上例中的所有內容(包括僞標籤)。
任何人都可以建議一個正則表達式來有效地匹配模式[php]anything[/php]
。
對不起,如果這是一個基本的問題,但我吮吸正則表達式!
我認爲"\[php\](.*?)\[\/php\]"
會做的伎倆。
編輯:你可能會也可能不需要雙引號 - 不知道你最終如何使用正則表達式字符串。
嘗試使用
\[php\](.*)\[\/php\]
這可能太貪婪了。 – datasage 2011-06-15 14:51:29
是的,這將匹配所有'[PHP] ... [/ php] .... [php] ... [/ php]' – 2011-06-15 15:17:07
如果結構,如[ php ]
,[/*comment/*php]
(或其他瘋狂的東西)是不允許的,你可以這樣做:
/\[php\](.*?)\[\/php\]/
的第一個匹配的組將是標籤內的文字。我認爲這個正則表達式非常直觀,除了?
:它會很懶,只會匹配文本直到第一個結束標記,所以如果你有[php]...[/php] [php]...[/php]
這個正則表達式不會匹配...[/php] [php]...
(也就是說,在第一個[php]
和第二個[/php]
)
如果您使用WordPress,但一定要查看簡碼API。
http://codex.wordpress.org/Shortcode_API
如果不考慮抓住它的代碼。它是這樣寫的,所以它可以在任何應用程序中使用。
可以搜索字符串之間的這些標籤,例如
\[PHP\](.+[^\b\[])\[/PHP\]
不應該'PHP'爲'php'以符合OP的標準嗎? – 2011-06-15 15:19:57
-1,因爲你的解決方案無法匹配'[php] f(a,b)[/ php]',因爲'''和空格都是單詞邊界。 – 2011-06-15 15:36:16
<?php
$s = "Lorem ipsum dolor sit amet, [php]functionName(args1, args2)[/php] ok.";
echo preg_replace("/\[php\][^\[]+\[\/php\]/", "seems to work", $s) . "\n";
// prints => Lorem ipsum dolor sit amet, seems to work ok.
?>
+1使用負面匹配的字符類。 – 2011-06-15 15:34:01
'[php] func($ somearray [0])[/ php]'? – 2011-06-15 15:42:32
試試這個:
$start_tag ='\\\\[php\\\\]\\\\s*';
$function ='((\\\\w+)\\\\s*\\\\(([^)]*)\\\\)';
$end_tag ='\\\\s*\\\\[\\\\/php\\\\]';
$re='/(' . $start_tag . $function . $end_tag . ')/';
是:
( # start capture group #1 - full match
\[ # literal '['
php # literal 'php'
\] # literal ']'
\s* # optional whitespace
( # start capture group #2 - full function
( # start capture group #3 - function name
\w+ # one or more word chars [A-Za-z0-9_]
) # end capture group #3
\( # literal '('
( # start capture group #4 - function arguments
[^)]* # zero or more non-')' chars
) # end capture group #4
\) # literal ')'
) # end capture group #2
\s* # optional whitespace
\[ # literal '['
php # literal 'php'
\] # literal ']'
) # end capture group #1
不知道如果我在PHP中正確轉義。因人而異。 – 2011-06-15 15:18:51
請注意,'\ w +'和'[^)] *'都不需要非貪婪('懶惰'),因爲它們都被後續字符限制。 – 2011-06-15 15:22:17
由於PHP禁止以數字開頭的標識符,請將'\ w +'更改爲'[A-Za-z _] \ w *'以僅匹配法定函數名稱。 – 2011-06-15 15:30:04
參見:[開源正則表達式工具](http://stackoverflow.com/questions/89718/is-there-anything-like-reg exbuddy-in-the-the-open-source-world),這可以幫助創建相應的匹配模式。 – mario 2011-06-15 14:49:50
您是否想要匹配您的開始和結束僞標記之間的任何內容,或者只匹配PHP函數調用? – 2011-06-15 15:38:27