首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP preg_replace -替换文本部分,但不要太快

PHP preg_replace -替换文本部分,但不要太快
EN

Stack Overflow用户
提问于 2019-10-01 13:00:34
回答 2查看 52关注 0票数 2

使用:

代码语言:javascript
复制
$text = preg_replace("/\[\[(.*?)SPACE(.*?)\]\]/im",'$2',$text);

用于清洗和获取wordtwo 2

代码语言:javascript
复制
$text = '..text.. [[wordoneSPACE**wordtwo**]] ..moretext..';

但如果文本已经[之前]失败

代码语言:javascript
复制
$text = '.. [[ ..text(not to cut).. [[wordoneSPACE**wordtwo**]] ..moretext..';

我怎样才能限制在只有空格字的地方?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-01 13:03:39

如果您可以使用的[]中没有[[...]]

代码语言:javascript
复制
$text = preg_replace("/\[\[([^][]*)SPACE([^][]*)]]/i",'$2',$text);

regex演示[^][]否定字符类只匹配[]以外的字符,不会跨越[[...]]边框。

否则,使用脾气暴躁的象征

代码语言:javascript
复制
$text = preg_replace("/\[\[((?:(?!\[{2}).)*?)SPACE(.*?)]]/is",'$2',$text);

这个regex演示

(?:(?!\[{2}).)*?模式将匹配任何字符、0或更多的重复,但尽可能少,这不会启动[[字符序列,并且不会跨越下一个实体[[边界。

票数 1
EN

Stack Overflow用户

发布于 2019-10-01 13:19:27

另一个选项可能是使用占有量词

在第一组中,如果后面跟着空格,则可以使用一个否定式字符类来匹配除方括号或S以外的任何字符。

代码语言:javascript
复制
\[\[([^][S]++(?:S(?!PACE)|[^][S]+)*+)SPACE([^][]++)\]\]

各部分

  • \[\[匹配[[
  • ( Capture group 1
    • [^][S]++匹配1+乘以除S以外的任何字符,]或[
    • (?:非捕获群
      • S(?!PACE)匹配一个S没有后面的步调
      • |
      • [^][S]+匹配1+乘以除S以外的任何字符,]或[

代码语言:javascript
复制
- `)*+` Close group and repeat 0+ times

  • )闭组1
  • SPACE匹配
  • ( Capture group 2
    • [^][]++匹配1+乘以除][以外的任何字符

  • )紧群
  • \]\]匹配]]

Regex演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58185333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档