【问题标题】:Regular expression : Find elements wrapped with specific selectors正则表达式:查找用特定选择器包裹的元素
【发布时间】:2011-03-16 22:40:31
【问题描述】:

我的正则表达式真的很糟糕 - 从来没有足够的时间来正确地学习它。

我正在尝试查找字符串中用 %% %% 包裹的所有元素 - 例如:

%%图库%%

知道什么正则表达式可以在这里完成这项工作吗?

稍后我将在 PHP 中使用它来将占位符替换为相关插件。

【问题讨论】:

  • 例如,/%%(.+?)%%/s 会匹配。如果您需要更合适/更准确的答案,则必须提供有关该问题的更多信息。

标签: php regex


【解决方案1】:
preg_replace("/%%\w+%%/", "replacement", "string");

【讨论】:

    【解决方案2】:

    /%%[a-z]+%%/i 之类的东西会起作用。

    [a-z]+ 部分表示在 a-z 之间应该有多个字符 (+),并用 % 包围。 /i 使其不区分大小写。

    【讨论】:

      【解决方案3】:

      一个正则表达式是:

      %%(.*?)%%
      

      如:

      $string = preg_replace('/%%(.*?)%%/', '{replacement for $1}', $string);
      

      .* 匹配“任何东西”,? 使其成为非贪婪匹配,这意味着它会尝试找到尽可能短的匹配。如果您有一个类似"%%a%% %%b%%" 的字符串,您不希望它找到可能的最长 匹配项,即a%% %%b

      %%a%% %%b%%         # Greedy
        ^^^^^^^
      
      %%a%% %%b%%         # Non-greedy
        ^     ^
      

      替换字符串中的$1 是匹配的标签。在你的例子中,这就是gallery这个词。

      【讨论】:

        【解决方案4】:

        看:regex greedy problem (C#)

        (?<!%)%%([^%]+)%%(?!%)

        这完全匹配 %%anything%%。匹配内容也正确,例如“Lorem ipsum %%sample%% lorem %%%ipsum%%% 等等”。

        【讨论】:

          猜你喜欢
          • 2013-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-24
          • 1970-01-01
          相关资源
          最近更新 更多