繁体   English   中英

如何使用正则表达式修改句子中的单词以在 php 中查找单词

[英]How to modify a word in a sentence using regex to find the word in php

我有一个句子,其中包含以 $ 开头和结尾的单词/方程式。 例如,

"The $girl$ is a $good$ person"

我想将句子修改为

"The $$girl$$ is a $$good$$ person".

我找到了一种查找单词的方法,但问题是如何用修改后的版本替换它们。 我在这个平台上找到了这个,但它没有回答这个问题。

preg_replace('/\$\S+\$/', '', $text) 

任何帮助将不胜感激。 谢谢

您可以使用

$text = 'The $girl$ is a $good$ person';
echo preg_replace('/\$[^\s$]+\$/', '\$$0\$', $text);
// => The $$girl$$ is a $$good$$ person

请参阅PHP 演示 请参阅此正则表达式演示 详情

  • \$ - 一个$文字字符
  • [^\s$]+ - 除了$和空格之外的任何一个或多个字符
  • \$ - $文字字符。

\$$0\$替换意味着整个匹配被替换为自身( $0 )并在两端添加两个$

为避免重新包装$$...$$子字符串,您可以使用

$text = 'The $girl$ is a $good$ person, and keep $$this$$.';
echo preg_replace('/\${2,}[^\s$]+\${2,}(*SKIP)(*FAIL)|\$[^\s$]+\$/', '\$$0\$', $text);
// => The $$girl$$ is a $$good$$ person, and keep $$this$$.

请参阅此 PHP 演示 \${2,}[^\s$]+\${2,}(*SKIP)(*FAIL)| part 匹配所有不包含$和两个或多个$字符之间的空格的子字符串并跳过它们。

请参阅正则表达式演示

您可以在模式周围声明空白边界,并在美元符号周围使用$0来使用完全匹配。

请注意, \S也可以匹配$ ,因此您可以使用否定字符 class [^$]匹配除$之外的任何字符

(?<!\S)\$[^$]+\$(?!\S)
  • (?<!\S)向左断言空白边界
  • \$匹配$
  • [^$]+匹配 1+ 个除$之外的任何字符
  • \$匹配$
  • (?!\S)断言右边的空白边界

请参阅正则表达式演示PHP 演示

$text = '"The $girl$ is a $good$ person"';
echo preg_replace('/(?<!\S)\$[^$]+\$(?!\S)/', '$$0$', $text);

Output

The $$girl$$ is a $$good$$ person

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM