字符串操作:查找模式的第一次出现


String Manipulation: finding first occurence of pattern

我有一些以[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 表示不区分大小写。

您可以在代码板上查看此运行

我会使用strpossubstr

基本上,你会想要做这样的事情:

$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 是要在原始字符串中插入的文本。

希望对您有所帮助。如果您需要任何澄清,请随时发表评论。