Php 替换所有出现的字符串
我想在所有Php 替换所有出现的字符串,php,preg-replace,Php,Preg Replace,我想在所有p标记中添加一个类,其中包含阿拉伯语文本。例如: <p>لمبارة وذ</p> <p>do nothing</p> <p>خمس دقائق يخ</p> <p>مراعاة إبقاء 3 لاعبين</p> 然而,它不能正常工作。它有两个问题: 它只匹配第一段 添加一个空的 沙箱 它只匹配第一段 这是因为您添加了最后一个参数,表示只希望替换第一个出现的参数。别提那个论点 添
p
标记中添加一个类,其中包含阿拉伯语文本。例如:
<p>لمبارة وذ</p>
<p>do nothing</p>
<p>خمس دقائق يخ</p>
<p>مراعاة إبقاء 3 لاعبين</p>
然而,它不能正常工作。它有两个问题:
这实际上是您不匹配的原始
。只需将其添加到匹配模式中,但将其保留在匹配组之外,这样当您替换为$1
时,它将被忽略
以下是一个更正版本,也是关于:
$text=preg\u replace(“~(\p{阿拉伯语}+)~u”,“$1”,“$string”);
它只匹配第一段
这是因为您添加了最后一个参数,表示只希望替换第一个出现的参数。别提那个论点
添加一个空的
这实际上是您不匹配的原始
。只需将其添加到匹配模式中,但将其保留在匹配组之外,这样当您替换为$1
时,它将被忽略
以下是一个更正版本,也是关于:
$text=preg\u replace(“~(\p{阿拉伯语}+)~u”,“$1”,“$string”);
您的第一个问题是您没有告诉它匹配,所以它没有
你的主要问题是空格不是阿拉伯语。只需添加与之匹配的备选方案即可解决您的问题:
$text = preg_replace("~<p>(\p{Arabic}*|\s*)~u", "<p class=\"foo\">$1", $string);
$text=preg\u replace(“~(\p{Arabic}*\s*)~u”,“$1”,“$string”);
您的第一个问题是您没有告诉它匹配,所以它没有
你的主要问题是空格不是阿拉伯语。只需添加与之匹配的备选方案即可解决您的问题:
$text = preg_replace("~<p>(\p{Arabic}*|\s*)~u", "<p class=\"foo\">$1", $string);
$text=preg\u replace(“~(\p{Arabic}*\s*)~u”,“$1”,“$string”);
使用DOMDocument和DOMXPath:
$html = <<<'EOD'
<p>لمبارة وذ</p>
<p>خمس دقائق يخ</p>
<p>مراعاة إبقاء 3 لاعبين</p>
EOD;
libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTML('<div>'.$html.'</div>', LIBXML_HTML_NOIMPLIED);
$xpath = new DOMXPath($dom);
// here you register the php namespace and the preg_match function
// to be able to use it in the XPath query
$xpath->registerNamespace("php", "http://php.net/xpath");
$xpath->registerPhpFunctions('preg_match');
// select only p nodes with at least one arabic letter
$pNodes = $xpath->query("//p[php:functionString('preg_match', '~\p{Arabic}~u', .) > 0]");
foreach ($pNodes as $pNode) {
$pNode->setAttribute('class', 'foo');
}
$result = '';
foreach ($dom->documentElement->childNodes as $childNode) {
$result .= $dom->saveHTML($childNode);
}
echo $result;
$html=registerNamespace(“php”http://php.net/xpath");
$xpath->registerHPFunctions('preg_match');
//仅选择至少包含一个阿拉伯字母的p节点
$pNodes=$xpath->query(//p[php:functionString('preg_match','~\p{Arabic}~u',)>0]);
foreach($pNodes作为$pNode){
$pNode->setAttribute('class','foo');
}
$result='';
foreach($dom->documentElement->childNodes作为$childNode){
$result.=$dom->saveHTML($childNode);
}
回声$结果;
使用DOMDocument和DOMXPath:
$html = <<<'EOD'
<p>لمبارة وذ</p>
<p>خمس دقائق يخ</p>
<p>مراعاة إبقاء 3 لاعبين</p>
EOD;
libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTML('<div>'.$html.'</div>', LIBXML_HTML_NOIMPLIED);
$xpath = new DOMXPath($dom);
// here you register the php namespace and the preg_match function
// to be able to use it in the XPath query
$xpath->registerNamespace("php", "http://php.net/xpath");
$xpath->registerPhpFunctions('preg_match');
// select only p nodes with at least one arabic letter
$pNodes = $xpath->query("//p[php:functionString('preg_match', '~\p{Arabic}~u', .) > 0]");
foreach ($pNodes as $pNode) {
$pNode->setAttribute('class', 'foo');
}
$result = '';
foreach ($dom->documentElement->childNodes as $childNode) {
$result .= $dom->saveHTML($childNode);
}
echo $result;
$html=registerNamespace(“php”http://php.net/xpath");
$xpath->registerHPFunctions('preg_match');
//仅选择至少包含一个阿拉伯字母的p节点
$pNodes=$xpath->query(//p[php:functionString('preg_match','~\p{Arabic}~u',)>0]);
foreach($pNodes作为$pNode){
$pNode->setAttribute('class','foo');
}
$result='';
foreach($dom->documentElement->childNodes作为$childNode){
$result.=$dom->saveHTML($childNode);
}
回声$结果;
如果它不是阿拉伯语怎么办?@SimonKirsten那么它应该保持原样。我编辑了问题中的示例,请看。如果它不是阿拉伯语怎么办?@SimonKirsten,那么它应该保持原样。我编辑了问题中的示例,请参见。谢谢,但我在您发布的沙盒链接上看到了完全相同的问题。你确定它是正确的链接吗?错误的链接:就是这样:谢谢,但我在你发布的沙盒链接上看到了完全相同的问题。你确定它的链接是正确的吗?错误的链接:这就是它:
$html = <<<'EOD'
<p>لمبارة وذ</p>
<p>خمس دقائق يخ</p>
<p>مراعاة إبقاء 3 لاعبين</p>
EOD;
libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTML('<div>'.$html.'</div>', LIBXML_HTML_NOIMPLIED);
$xpath = new DOMXPath($dom);
// here you register the php namespace and the preg_match function
// to be able to use it in the XPath query
$xpath->registerNamespace("php", "http://php.net/xpath");
$xpath->registerPhpFunctions('preg_match');
// select only p nodes with at least one arabic letter
$pNodes = $xpath->query("//p[php:functionString('preg_match', '~\p{Arabic}~u', .) > 0]");
foreach ($pNodes as $pNode) {
$pNode->setAttribute('class', 'foo');
}
$result = '';
foreach ($dom->documentElement->childNodes as $childNode) {
$result .= $dom->saveHTML($childNode);
}
echo $result;