作为项目的一部分,我需要分析其可以包含以下面的方式来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