正则表达式匹配[php]代码[/ php]

时间:2011-06-15 14:46:49

标签: php regex

作为项目的一部分,我需要以下列方式分析可能包含对PHP的引用的字符串:

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

函数名称并不总是相同,我想用上面的例子中的所有内容(包括伪标签)替换另一个值。

任何人都可以建议使用正则表达式来有效匹配模式[php]anything[/php]

很抱歉,如果这是一个基本问题,但我很擅长正则表达式!

7 个答案:

答案 0 :(得分:6)

我认为"\[php\](.*?)\[\/php\]"可以解决问题。

编辑:您可能需要也可能不需要双引号 - 不确定您最终如何使用正则表达式字符串。

答案 1 :(得分:3)

构造如[ php ][/*comment/*php](或其他疯狂的东西)是不允许的,你可以使用它:

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

第一个匹配的组将是标签内的文本。我认为正则表达式非常直观,除了?:它将是惰性的,只匹配文本直到第一个结束标记,因此如果你有[php]...[/php] [php]...[/php]正则表达式将不匹配{{1} (即,在第一个...[/php] [php]...和第二个[php]之间)

答案 2 :(得分: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.

?>

答案 3 :(得分:1)

如果你正在使用WordPress,但一定要查看短代码API。

http://codex.wordpress.org/Shortcode_API

如果不考虑抓住它的代码。它是写的,所以它可以在任何应用程序中使用。

答案 4 :(得分: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

答案 5 :(得分:0)

尝试使用

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

答案 6 :(得分:0)

您可以在这些标签之间搜索字符串,例如

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