Sad*_*adi 15 html javascript php string replace
我想修改HTML之类的
I am <b>Sadi, novice</b> programmer.
Run Code Online (Sandbox Code Playgroud)
至
I am <b>Sadi, learner</b> programmer.
Run Code Online (Sandbox Code Playgroud)
要做到这一点,我将使用字符串" 新手程序员 "进行搜索.我该怎么办?任何的想法?
它使用多个单词"新手程序员"进行搜索.这可能是一个完整的句子.应忽略额外的空白区域(例如新行,制表符),并且在搜索过程中必须忽略任何标记.但在更换标签期间必须保留.
它是一种转换器.如果它不区分大小写会更好.
谢谢
萨迪
更多说明:
我得到了一些很好的解决方案.但如果您有任何想法,请继续发帖.
我想更多地澄清问题,万一有人错过了.主要帖子将问题显示为示例场景.
1)现在问题是找到并替换一些字符串而不考虑标签.标签可以显示在单个单词中.字符串可能包含多个单词.标记仅出现在内容字符串或文档中.搜索词组从不包含任何标签.
我们可以轻松删除所有标签并进行一些文本操作.但是这里出现了另一个问题.
2)即使在替换文本后,标签也必须保留.这就是示例所示.
再次感谢您的帮助
好吧,我想这就是你想要的。它需要您的输入搜索和替换,将它们分割成由空格分隔的字符串数组,生成一个正则表达式,查找具有任意数量的空格/html标签的输入句子,并将其替换为在单词之间替换相同标签的替换句子。
如果搜索句子的字数高于替换句子的字数,则它仅在任何额外单词之间使用空格,如果替换字数高于搜索句子,则它将在末尾添加所有“孤立”标签。它还处理查找和替换中的正则表达式字符。
<?php
function htmlFriendlySearchAndReplace($find, $replace, $subject) {
$findWords = explode(" ", $find);
$replaceWords = explode(" ", $replace);
$findRegexp = "/";
for ($i = 0; $i < count($findWords); $i++) {
$findRegexp .= preg_replace("/([\\$\\^\\|\\.\\+\\*\\?\\(\\)\\[\\]\\{\\}\\\\\\-])/", "\\\\$1", $findWords[$i]);
if ($i < count($findWords) - 1) {
$findRegexp .= "(\s?(?:<[^>]*>)?\s(?:<[^>]*>)?)";
}
}
$findRegexp .= "/i";
$replaceRegexp = "";
for ($i = 0; $i < count($findWords) || $i < count($replaceWords); $i++) {
if ($i < count($replaceWords)) {
$replaceRegexp .= str_replace("$", "\\$", $replaceWords[$i]);
}
if ($i < count($findWords) - 1) {
$replaceRegexp .= "$" . ($i + 1);
} else {
if ($i < count($replaceWords) - 1) {
$replaceRegexp .= " ";
}
}
}
return preg_replace($findRegexp, $replaceRegexp, $subject);
}
?>
Run Code Online (Sandbox Code Playgroud)
以下是一些测试的结果:
Original : <b>Novice Programmer</b>
Search : Novice Programmer
Replace : Advanced Programmer
Result : <b>Advanced Programmer</b>
Original : Hi, <b>Novice Programmer</b>
Search : Novice Programmer
Replace : Advanced Programmer
Result : Hi, <b>Advanced Programmer</b>
Original : I am not a <b>Novice</b> Programmer
Search : Novice Programmer
Replace : Advanced Programmer
Result : I am not a <b>Advanced</b> Programmer
Original : Novice <b>Programmer</b> in the house
Search : Novice Programmer
Replace : Advanced Programmer
Result : Advanced <b>Programmer</b> in the house
Original : <i>I am not a <b>Novice</b> Programmer</i>
Search : Novice Programmer
Replace : Advanced Programmer
Result : <i>I am not a <b>Advanced</b> Programmer</i>
Original : I am not a <b><i>Novice</i> Programmer</b> any more
Search : Novice Programmer
Replace : Advanced Programmer
Result : I am not a <b><i>Advanced</i> Programmer</b> any more
Original : I am not a <b><i>Novice</i></b> Programmer any more
Search : Novice Programmer
Replace : Advanced Programmer
Result : I am not a <b><i>Advanced</i></b> Programmer any more
Original : I am not a Novice<b> <i> </i></b> Programmer any more
Search : Novice Programmer
Replace : Advanced Programmer
Result : I am not a Advanced<b> <i> </i></b> Programmer any more
Original : I am not a Novice <b><i> </i></b> Programmer any more
Search : Novice Programmer
Replace : Advanced Programmer
Result : I am not a Advanced <b><i> </i></b> Programmer any more
Original : <i>I am a <b>Novice</b> Programmer</i> too, now
Search : Novice Programmer too
Replace : Advanced Programmer
Result : <i>I am a <b>Advanced</b> Programmer</i> , now
Original : <i>I am a <b>Novice</b> Programmer</i>, now
Search : Novice Programmer
Replace : Advanced Programmer Too
Result : <i>I am a <b>Advanced</b> Programmer Too</i>, now
Original : <i>I make <b>No money</b>, now</i>
Search : No money
Replace : Mucho$1 Dollar$
Result : <i>I make <b>Mucho$1 Dollar$</b>, now</i>
Original : <i>I like regexp, you can do [A-Z]</i>
Search : [A-Z]
Replace : [Z-A]
Result : <i>I like regexp, you can do [Z-A]</i>
Run Code Online (Sandbox Code Playgroud)