字符串操作:找到模式的第一个出现

时间:2013-01-29 18:53:13

标签: php regex

我的某些文字以[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中有一种简单的方法吗?

3 个答案:

答案 0 :(得分:1)

preg_replace的内容怎么样?

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

正则表达式正在寻找[br]标记,后面可选地包含一些空格,以及更多[br]标记。可以有任意数量的以下[br]标记。最后的i表示不区分大小写。

您可以在codepad

上查看此内容

答案 1 :(得分:0)

我会使用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;

答案 2 :(得分:0)

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

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

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

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