簡體   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