gpt4 book ai didi

php - 用于替换未包含在标签之间的单词的正则表达式(非 html)

转载 作者:可可西里 更新时间:2023-11-01 00:33:44 25 4
gpt4 key购买 nike

有限的正则表达式经验,我在 PHP 中使用 preg_replace。

我想替换不在 [no-glossary] ... [/no-glossary] 标签之间的指定“单词”。如果它们不是“单词”和标签之间的空格,或者如果它们是“单词”之后的空格,我的表达式就有效,但是如果我在单词之前放置一个空格(预期),它就会失败!

这些工作:

$html = '<p>Do not replace [no-glossary]this[/no-glossary] replace this.</p>';
$html = '<p>Do not replace [no-glossary]this [/no-glossary] replace this.</p>';

这不是:

$html = '<p>Do not replace [no-glossary] this [/no-glossary] replace this.</p>';

使用的模式逐部分解释

/                      - find
(?<!\[no-glossary\]) - Not after the [no-glossary] tag
[ ]* - Followed by 0 or more spaces (I think this is the problem)
\b(this)\b - The word "this" between word boundaries
[ ]* - Followed by 0 or more spaces
(?!\[\/no-glossary\]) - Not before the [/no-glossary] tag
/

代码如下:

$pattern = "/(?<!\[no-glossary\])[ ]*\b(this)\b[ ]*(?!\[\/no-glossary\])/"; 
$html = '<p>Do not replace [no-glossary] this [/no-glossary] replace this.</p>';
$html = preg_replace($pattern, "that", $html);

print $html;

输出:

<p>Do not change [no-glossary] that [/no-glossary] changethat.</p>

问题:

  1. 在标签之间更改了单词。
  2. 在正确替换的第二个单词前删除了空格。

最佳答案

只捕获空格:

$subject = <<<LOD
<p>Do not replace [no-glossary]this[/no-glossary] replace this.</p>
<p>Do not replace [no-glossary]this [/no-glossary] replace this.</p>
<p>Do not replace [no-glossary] this[/no-glossary] replace this.</p>
<p>Do not replace [no-glossary] this [/no-glossary] replace this.</p>
LOD;
$pattern = '`(?<!\[no-glossary])( *+)\bthis\b( *+)(?!\[/no-glossary])`';
echo $subject.'<br/>';
echo preg_replace($pattern,"$1rabbit$2",$subject); ?>

关于php - 用于替换未包含在标签之间的单词的正则表达式(非 html),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15864391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com