2011-06-15 53 views
0

作爲項目的一部分,我需要分析其可以包含以下面的方式來PHP參考串:正則表達式[PHP]代碼[/ PHP]

[php]functionName(args1, args2)[/php]

函數名並不總是相同的,我想用另一個值替換上例中的所有內容(包括僞標籤)。

任何人都可以建議一個正則表達式來有效地匹配模式[php]anything[/php]

對不起,如果這是一個基本的問題,但我吮吸正則表達式!

+0

參見:[開源正則表達式工具](http://stackoverflow.com/questions/89718/is-there-anything-like-reg exbuddy-in-the-the-open-source-world),這可以幫助創建相應的匹配模式。 – mario 2011-06-15 14:49:50

+0

您是否想要匹配您的開始和結束僞標記之間的任何內容,或者只匹配PHP函數調用? – 2011-06-15 15:38:27

回答

6

我認爲"\[php\](.*?)\[\/php\]"會做的伎倆。

編輯:你可能會也可能不需要雙引號 - 不知道你最終如何使用正則表達式字符串。

0

嘗試使用

\[php\](.*)\[\/php\] 
+4

這可能太貪婪了。 – datasage 2011-06-15 14:51:29

+1

是的,這將匹配所有'[PHP] ... [/ php] .... [php] ... [/ php]' – 2011-06-15 15:17:07

3

如果結構,如[ php ][/*comment/*php](或其他瘋狂的東西)是不允許的,你可以這樣做:

/\[php\](.*?)\[\/php\]/ 

的第一個匹配的組將是標籤內的文字。我認爲這個正則表達式非常直觀,除了?:它會很懶,只會匹配文本直到第一個結束標記,所以如果你有[php]...[/php] [php]...[/php]這個正則表達式不會匹配...[/php] [php]...(也就是說,在第一個[php]和第二個[/php]

+0

你有一個額外的反斜槓.. – Dave 2011-06-15 14:55:37

+0

@Dave哎呀,對不起:) – 2011-06-15 15:03:02

+0

沒有汗水。絕對+1你的答案爲額外的解釋/信息。 – Dave 2011-06-15 15:11:41

1

如果您使用WordPress,但一定要查看簡碼API。

http://codex.wordpress.org/Shortcode_API

如果不考慮抓住它的代碼。它是這樣寫的,所以它可以在任何應用程序中使用。

0

可以搜索字符串之間的這些標籤,例如

\[PHP\](.+[^\b\[])\[/PHP\] 
+0

不應該'PHP'爲'php'以符合OP的標準嗎? – 2011-06-15 15:19:57

+0

-1,因爲你的解決方案無法匹配'[php] f(a,b)[/ php]',因爲'''和空格都是單詞邊界。 – 2011-06-15 15:36:16

3
<?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. 

?> 
+0

+1使用負面匹配的字符類。 – 2011-06-15 15:34:01

+0

'[php] func($ somearray [0])[/ php]'? – 2011-06-15 15:42:32

1

試試這個:

$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 
+0

不知道如果我在PHP中正確轉義。因人而異。 – 2011-06-15 15:18:51

+0

請注意,'\ w +'和'[^)] *'都不需要非貪婪('懶惰'),因爲它們都被後續字符限制。 – 2011-06-15 15:22:17

+0

由於PHP禁止以數字開頭的標識符,請將'\ w +'更改爲'[A-Za-z _] \ w *'以僅匹配法定函數名稱。 – 2011-06-15 15:30:04