php - 字符类中的单词

标签 php regex preg-replace

在字符类中我可以匹配完整单词吗?

使用此代码,正则表达式会删除 {else} 标记,因此是否可以将 else 添加到字符类内部作为单词,而不是作为4个字母?

$section = "
{if {money} == 'yes'}
   Sweet!
{else}
    Too bad...
{/if}
";

echo preg_replace("/\{[^ \/]+\}/iU", "''", $section);

我认为这可能有效(但事实并非如此):

echo preg_replace("/\{[^ (else)\/]+\}/iU", "''", $section);

预期输出:

{if '' == 'yes'}
   Sweet!
{else}
    Too bad...
{/if}

最佳答案

。您绝对不能将单词放置在字符类[] 中。

但是您可以在此处使用Negative Lookahead

$section = <<<DATA
{if {money} == 'yes'}
   Sweet!
{else}
    Too bad...
{/if}
DATA;

$section = preg_replace('~\{(?!else|/)\S+\}~i', "''", $section);
echo $section;

参见Live demo

正则表达式:

\{            '{'
 (?!          look ahead to see if there is not:
  else        'else'
  |           OR
  /           '/'
 )            end of look-ahead
  \S+         non-whitespace (all but \n, \r, \t, \f, and " ") (1 or more times)
\}            '}'

关于php - 字符类中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20752879/

相关文章:

PHP session 未设置或 PHP session 销毁

php - 使用 Ajax Post 通过 javascript 将 Json 传递给 php 不起作用

php - Laravel 调用未定义方法 Intervention\Image\File::delete()

php - 使用 PHP 检查 MySQL 查询的结果是哪个表?

c# - 有效函数名称的正则表达式 ([a-zA-Z]\w+)[^\w]

PHP替换句子中连续出现的字符

c++ - 如何检查哪个匹配组被用来匹配(boost-regex)

regex - Scala-replaceAllIn

php - 用于清除空的、不必要的 HTML 标记的正则表达式

php - 在关联数组中搜索和替换