正则表达式匹配[php] code [/ php]

问题描述

| 作为项目的一部分,我需要按以下方式分析可能包含对PHP的引用的字符串:
[PHP]functionName(args1,args2)[/PHP]
函数名称并不总是相同的,我想用另一个值替换上面示例中的所有内容包括标记)。 谁能建议正则表达式有效地匹配模式
[PHP]anything[/PHP]
。 抱歉,这是一个基本问题,但是我很讨厌正则表达式!     

解决方法

        我认为2英镑就能解决问题。 编辑:您可能需要也可能不需要双引号-不确定最终将如何使用正则表达式字符串。     ,        
<?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.

?>
    ,        如果不允许使用
[ php ]
[/*comment/*php]
(或其他疯狂的东西)之类的构造,则可以使用以下方法:
/\\[php\\](.*?)\\[\\/php\\]/
第一个匹配的组将是标签内的文本。我认为regex非常直观,除了ѭ7之外:它将很懒,并且仅在第一个结束标记之前匹配文本,因此,如果您有
[php]...[/php]   [php]...[/php]
,则正则表达式将不匹配
...[/php]   [php]...
(即在第一个
[php]
和第二个between之间)
[/php]
)     ,        如果您使用的是WordPress,请务必查看shortcode API。 http://codex.wordpress.org/Shortcode_API 如果不考虑获取其代码。它被编写为可以在任何应用程序中使用。     ,        尝试这个:
$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\\](.*)\\[\\/php\\]
    ,        您可以在这些标签之间搜索字符串,例如
\\[PHP\\](.+[^\\b\\[])\\[/PHP\\]