如果使用<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>
答案 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/1与https://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">
。我上面提到的代码更改已经使用了这个假设。