加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 正则表达式内的正则表达式模式

发布时间:2020-12-13 21:40:34 所属栏目:PHP教程 来源:网络整理
导读:我想从我的代码中删除任何额外的空格,我正在解析一个docblock.问题是我不想删除 code代码中的空格 / code. 例如,我用它来删除额外的空格: $string = preg_replace('/[ ]{2,}/','',$string); 但我想在 code / code中保留空格. 这段代码/字符串: This is som
我想从我的代码中删除任何额外的空格,我正在解析一个docblock.问题是我不想删除< code>代码中的空格< / code>.

例如,我用它来删除额外的空格:

$string = preg_replace('/[ ]{2,}/','',$string);

但我想在< code>< / code>中保留空格.

这段代码/字符串:

This  is some  text
  This is also   some text

<code>
User::setup(array(
    'key1' => 'value1','key2' => 'value1'
));
</code>

应该转化为:

This is some text
This is also some text

<code>
User::setup(array(
    'key1' => 'value1','key2' => 'value1'
));
</code>

我怎样才能做到这一点?

解决方法

你并不是真的在寻找条件 – 你需要一种方法来跳过部分字符串,这样它们就不会被替换.使用preg_replace,通过插入虚拟组并用自身替换每个组,可以相当容易地完成此操作.在您的情况下,您只需要一个:

$str = preg_replace("~(<code>.*?</code>)|^ +| +$|( ) +~smi","$1$2",$str);

它是如何工作的?

>(< code>.*?< / code>) – 匹配< code>阻止进入第一组,$1.这假定简单格式化并且没有嵌套,但如果需要可能会很复杂.
> ^ – 匹配并删除行首的空格.
> [] $ – 匹配并删除行尾的空格.
>()匹配行中间的两个或多个空格,并将第一个空格捕获到第二个组$2.

替换字符串$1 $2将保持< code>块和第一个空格(如果被捕获),并删除它匹配的任何其他内容.

要记住的事情:

>如果$1或$2未捕获,则将替换为空字符串.
>轮换(a | b | c)从左到右工作 – 当它匹配时,它就会满足,并且不再尝试匹配.这就是为什么^ | $必须在()之前.

工作示例:http://ideone.com/HxbaV

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读