我有一些以[br]
标签结尾的文本,可以选择后跟更多[br]
标签和/或空格字符,但没有别的。 例如:
bla blah d [br] fkjd fkdh fkd fks
sdkf skdfh djfh[br]
[br]
[br]
我想在该[br]
标签之前插入文本,如下所示:
bla blah d [br] fkjd fkdh fkd fks
sdkf skdfh djfh [INSERTED TEXT][br]
[br]
[br]
我的问题是,我不知道会有多少额外的[br]
标签或空格字符。
有没有一种简单的方法可以在 PHP 中做到这一点?
preg_replace的东西呢?
preg_replace('!'[br']('s+'[br'])+!i', 'INSERT$0', $subject);
正则表达式正在寻找一个[br]
标签,后跟一定数量的空格,以及进一步[br]
标签。可以有任意数量的以下[br]
标记。末尾的 i 表示不区分大小写。
您可以在代码板上查看此运行
我会使用strpos
和substr
。
基本上,你会想要做这样的事情:
$str = 'bla blah dfkjd fkdh fkd fks sdkf skdfh djfh[br] [BR] [BR]';
$textToFind = '[br]';
$textToInsert = 'Hello World!';
// find the first $textToFind, ie '[br]';
$pos = strpos($str, $textToFind);
// cut from 0 to $pos, then insert the text, then $pos to the end of the string
$newStr = substr($str, 0, $pos) . $textToInsert . substr($str, $pos);
echo $newStr;
好吧,我不是php的人,但知道一些javescript。它可能会帮助您了解如何解决问题。
str = str.replace(/(.*?)((<br>)*)$/,'$1' + insertedText + '$2')
这里str
是包含文本的字符串。替换函数/(.*?)((<br>)*)$/
的第一个参数是与模式匹配的正则表达式。 (.*?)
匹配<br>
标记之前显示的文本。 ((<br>)*)$
匹配任意数量的<br>
,并确保这些<br>
出现在文本末尾。
第二个参数是实际替换的字符串。 insertedText
是要在原始字符串中插入的文本。
希望对您有所帮助。如果您需要任何澄清,请随时发表评论。