2011-06-15 74 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