preg_replace剪切字符串的第一个字母

时间:2016-03-15 20:35:40

标签: php regex preg-replace

如果使用<p>匹配以下表达式,我想向preg_replace添加一个类。

以下代码执行此操作但它会剪切字符串的第一个字母(rtl语言)。注意单词ہور,第一个字符ہ正在被剪切。如何解决这个问题?

$str = "<p>para 1</p><p> ہور سنا کنجڑا </p><p>para3</p>"; 
$result = preg_replace("~\p{Arabic}~u", "<p class=\"foo\">", $str, 1);

echo $result;

//output
<p>para 1</p><p> <p class="foo">ور سنا کنجڑا </p><p>para3</p>

Demo

2 个答案:

答案 0 :(得分:2)

对找到的角色进行分组。

$str = "<p>para 1</p><p> ہور سنا کنجڑا </p><p>para3</p>"; 
$result = preg_replace("~(\p{Arabic})~u", "<p class=\"foo\">$1", $str, 1);
echo $result;

()捕获找到的阿拉伯字符 $1将其添加回替换字符串。

正则表达式演示:https://regex101.com/r/yN5vW3/1https://regex101.com/r/yN5vW3/2对 PHP演示:https://eval.in/537056

答案 1 :(得分:2)

preg_replace()没有“剪切”字符串的第一个字母。 用你传递它作为第二个参数的字符串替换它。这就是preg_replace()为生活所做的事情;它取代了字符串片段: - )

有几种方法可以告诉它你做了什么。例如,您可以将sub-string that matches用于replacement()字符串:

$result = preg_replace("~<p>(\p{Arabic})~u", '<p class="foo">$1', $str, 1);

或者您可以使用assertion

$result = preg_replace("~<p>(?=\p{Arabic})~u", '<p class="foo">', $str, 1);

无论如何,当段落包含阿拉伯语单词时,您可能需要将<p>替换为<p class="foo">。我上面提到的代码更改已经使用了这个假设。