首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用preg_replace忽略特定的单词

如何用preg_replace忽略特定的单词
EN

Stack Overflow用户
提问于 2018-06-29 13:06:31
回答 1查看 381关注 0票数 0

请考虑以下几点:

代码语言:javascript
运行
复制
$string = "Hello, there! Welcome to <>?@#$!& our site<!END!>";

我试图删除除字母、数字、空格和“特殊标签”<!END!>以外的所有内容

使用preg_replace,我可以这样写:

代码语言:javascript
运行
复制
$string = preg_replace("/[^A-Za-z0-9 ]/", "", $string);

移除除字母(大写和小写)、数字和空格以外的所有内容。现在,如果我也想忽略<!END!>标记,理论上我可以这样写:

代码语言:javascript
运行
复制
$string = preg_replace("/[^A-Za-z0-9 <!END!>]/", "", $string);

但是,这并不会特别忽略标记<!END!>,而是忽略它包含的任何字符。所以它将保存每一个<,>,和!在$string中。

结果:

代码语言:javascript
运行
复制
"Hello there! Welcome to <>! our site<!END!>"

但我想要:

代码语言:javascript
运行
复制
"Hello there Welcome to  our site<!END!>"

根据我的研究,应该可以使用\b标记在preg_replace中包含一个要忽略的特定单词,但是"/[^A-Za-z0-9 \b<!END!>\b]/"给了我与上面相同的结果。

我做错了什么吗?

现场演示:http://sandbox.onlinephpfunctions.com/code/219dc36ab8aa7dfa16e8e623f5f4ba7f4b4b930d

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-29 13:25:10

您可以使用(*SKIP)(*F)解决方案:

(*SKIP)(FAIL)|[^A-Za-z0-9 ]

这将符合:

  • <!END!>(*SKIP)(FAIL)匹配<!END!>,然后跳过该匹配
  • |
  • [^A-Za-z0-9 ]匹配不使用字符类中指定的内容

例如:

代码语言:javascript
运行
复制
$string = "Hello, there! Welcome to <>?@#$!& our site<!END!>";
$string = preg_replace("/<!END!>(*SKIP)(FAIL)|[^A-Za-z0-9 ]/", "", $string);
echo $string;

这将导致:

欢迎来到我们的site

演示

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

https://stackoverflow.com/questions/51102482

复制
相关文章

相似问题

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