-1

我有一些以标签结尾的文本[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 中做到这一点?

4

3 回答 3

1

preg_replace怎么样?

preg_replace('!\[br\](\s+\[br\])+!i', 'INSERT$0', $subject);

正则表达式正在寻找一个[br]标签,然后是一些空格,以及更多的[br]标签。可以有任意数量的以下[br]标签。末尾的 i 表示不区分大小写。

您可以在键盘上查看此运行

于 2013-01-29T19:00:32.383 回答
0

我会使用strposand 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;
于 2013-01-29T19:00:51.943 回答
0

好吧,我不是 php 的人,但知道一些 javescript。它可能会帮助您了解如何解决您的问题。

str = str.replace(/(.*?)((<br>)*)$/,'$1' + insertedText + '$2')

str是包含您的文本的字符串。replace 函数的第一个参数/(.*?)((<br>)*)$/是匹配模式的正则表达式。 (.*?)匹配出现在<br>标签之前的文本。((<br>)*)$匹配任意数量<br>并确保它们<br>出现在文本的末尾。
第二个参数是实际替换的字符串。insertedText是要在原始字符串中插入的文本。

希望能帮助到你。如果您需要任何澄清,请随时发表评论。

于 2013-01-29T19:15:33.570 回答