PHP preg_替换除括号中的文本以外的所有内容
我试图用PHP preg_替换除括号中的文本以外的所有内容,php,html,regex,preg-replace,Php,Html,Regex,Preg Replace,我试图用'替换以下字符串的每个匹配项,但将花括号和文本保留在里面。span元素周围还有文本,有多个标记,标记项和标记标题各不相同 示例字符串: Text text text text <span contenteditable="false" data-tag="{{tag_item}}">Tag Title</span> Text text text text <span contenteditable="false" data-tag="{{tag_item
'
替换以下字符串的每个匹配项,但将花括号和文本保留在里面。span元素周围还有文本,有多个标记,标记项和标记标题各不相同
示例字符串:
Text text text text
<span contenteditable="false" data-tag="{{tag_item}}">Tag Title</span>
Text text text text
<span contenteditable="false" data-tag="{{tag_item2}}">Tag Title2</span>
Text text text text
以下是迄今为止我所拥有的,但它不起作用:
$message = preg_replace('/" contenteditable="false">(.*)<\/span>/i', '', $message);
$message = str_replace('<span data-tag="', '', $message);
$message=preg_replace('/“contentedidated=”false“>(.*)/i','',''$message);
$message=str_replace(“这就是您要找的吗
$message=preg_replace('/.data tag=“(.)”*/“,'$1',$message);这就是您要找的吗
$message=preg_replace('/.data tag=“(.)”*/“,'$1',$message);这就是您要找的吗
$message=preg_replace('/.data tag=“(.)”*/“,'$1',$message);这就是您要找的吗
$message=preg_replace('/.data tag=“(.)”*/“,'$1',$message);您可以执行以下操作:
$m = preg_replace ('/<span contenteditable="false" data-tag=\"/i','',$message);
$answer = preg_replace ('/\">.*?<\/span>/i', '' ,$m);
$m=preg_replace('/.*?/i',''$m);
您可以执行以下操作:
$m = preg_replace ('/<span contenteditable="false" data-tag=\"/i','',$message);
$answer = preg_replace ('/\">.*?<\/span>/i', '' ,$m);
$m=preg_replace('/.*?/i',''$m);
您可以执行以下操作:
$m = preg_replace ('/<span contenteditable="false" data-tag=\"/i','',$message);
$answer = preg_replace ('/\">.*?<\/span>/i', '' ,$m);
$m=preg_replace('/.*?/i',''$m);
您可以执行以下操作:
$m = preg_replace ('/<span contenteditable="false" data-tag=\"/i','',$message);
$answer = preg_replace ('/\">.*?<\/span>/i', '' ,$m);
$m=preg_replace('/.*?/i',''$m);
好的,然后在一个正则表达式中执行:
= preg_replace("#
<(\w+) [^>]* (\{\{\w+\}\}) [^>]*>
(.*?)
</\1>
#smix", "$2 $3", $src)
=preg\u replace(“#
]*(\{\w+\})[^>]*>
(.*?)
#smix“,”$2$3“,$src)
这只是查找你的{tag}和任何东西,只要用它$2
和尖括号之间的文本$3
。好,然后在一个正则表达式中执行:
= preg_replace("#
<(\w+) [^>]* (\{\{\w+\}\}) [^>]*>
(.*?)
</\1>
#smix", "$2 $3", $src)
=preg\u replace(“#
]*(\{\w+\})[^>]*>
(.*?)
#smix“,”$2$3“,$src)
这只是查找你的{tag}和任何东西,只要用它$2
和尖括号之间的文本$3
。好,然后在一个正则表达式中执行:
= preg_replace("#
<(\w+) [^>]* (\{\{\w+\}\}) [^>]*>
(.*?)
</\1>
#smix", "$2 $3", $src)
=preg\u replace(“#
]*(\{\w+\})[^>]*>
(.*?)
#smix“,”$2$3“,$src)
这只是查找你的{tag}和任何东西,只要用它$2
和尖括号之间的文本$3
。好,然后在一个正则表达式中执行:
= preg_replace("#
<(\w+) [^>]* (\{\{\w+\}\}) [^>]*>
(.*?)
</\1>
#smix", "$2 $3", $src)
=preg\u replace(“#
]*(\{\w+\})[^>]*>
(.*?)
#smix“,”$2$3“,$src)
这只是查找你的{tag}和任何东西,只要它$2
和尖括号之间的文本$3
。不要使用正则表达式解析HTML,使用DOM
$html = <<<'HTML'
Text text text text
<span contenteditable="false" data-tag="{{tag_item}}">Tag Title</span>
Text text text text
<span contenteditable="false" data-tag="{{tag_item2}}">Tag Title2</span>
Text text text text
HTML;
$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXpath($dom);
$expression = '//text()[not(parent::*[@data-tag])]|//*[@data-tag]/@data-tag';
foreach ($xpath->evaluate($expression) as $node) {
switch ($node->nodeType) {
case XML_TEXT_NODE :
echo $node->nodeValue;
break;
case XML_ATTRIBUTE_NODE :
echo $node->value;
break;
}
}
将此限制到父节点没有“数据标记”属性的节点
[not(parent::*[@data-tag])]
或
选择所有数据标记属性
@data-tag
不要使用正则表达式来解析HTML,使用DOM
$html = <<<'HTML'
Text text text text
<span contenteditable="false" data-tag="{{tag_item}}">Tag Title</span>
Text text text text
<span contenteditable="false" data-tag="{{tag_item2}}">Tag Title2</span>
Text text text text
HTML;
$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXpath($dom);
$expression = '//text()[not(parent::*[@data-tag])]|//*[@data-tag]/@data-tag';
foreach ($xpath->evaluate($expression) as $node) {
switch ($node->nodeType) {
case XML_TEXT_NODE :
echo $node->nodeValue;
break;
case XML_ATTRIBUTE_NODE :
echo $node->value;
break;
}
}
将此限制到父节点没有“数据标记”属性的节点
[not(parent::*[@data-tag])]
或
选择所有数据标记属性
@data-tag
不要使用正则表达式来解析HTML,使用DOM
$html = <<<'HTML'
Text text text text
<span contenteditable="false" data-tag="{{tag_item}}">Tag Title</span>
Text text text text
<span contenteditable="false" data-tag="{{tag_item2}}">Tag Title2</span>
Text text text text
HTML;
$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXpath($dom);
$expression = '//text()[not(parent::*[@data-tag])]|//*[@data-tag]/@data-tag';
foreach ($xpath->evaluate($expression) as $node) {
switch ($node->nodeType) {
case XML_TEXT_NODE :
echo $node->nodeValue;
break;
case XML_ATTRIBUTE_NODE :
echo $node->value;
break;
}
}
将此限制到父节点没有“数据标记”属性的节点
[not(parent::*[@data-tag])]
或
选择所有数据标记属性
@data-tag
不要使用正则表达式来解析HTML,使用DOM
$html = <<<'HTML'
Text text text text
<span contenteditable="false" data-tag="{{tag_item}}">Tag Title</span>
Text text text text
<span contenteditable="false" data-tag="{{tag_item2}}">Tag Title2</span>
Text text text text
HTML;
$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXpath($dom);
$expression = '//text()[not(parent::*[@data-tag])]|//*[@data-tag]/@data-tag';
foreach ($xpath->evaluate($expression) as $node) {
switch ($node->nodeType) {
case XML_TEXT_NODE :
echo $node->nodeValue;
break;
case XML_ATTRIBUTE_NODE :
echo $node->value;
break;
}
}
将此限制到父节点没有“数据标记”属性的节点
[not(parent::*[@data-tag])]
或
选择所有数据标记属性
@data-tag
如果我正确理解你的问题,也许这就是你的解决方案
$message=preg_replace('/.*/imsU','$1',$message);
选项“U”代表Ungreedy,并尝试为所有可数元素(我指后跟“?”、“+”或“*”的元素)查找最短的出现时间,而不是最长的出现时间
您可以在此页面上有更多选项:
如果我正确理解了你的问题,也许这就是你的解决方案
$message=preg_replace('/.*/imsU','$1',$message);
选项“U”代表Ungreedy,并尝试为所有可数元素(我指后跟“?”、“+”或“*”的元素)查找最短的出现时间,而不是最长的出现时间
您可以在此页面上有更多选项:
如果我正确理解了你的问题,也许这就是你的解决方案
$message=preg_replace('/.*/imsU','$1',$message);
选项“U”代表Ungreedy,并尝试为所有可数元素(我指后跟“?”、“+”或“*”的元素)查找最短的出现时间,而不是最长的出现时间
您可以在此页面上有更多选项:
如果我正确理解了你的问题,也许这就是你的解决方案
$message=preg_replace('/.*/imsU','$1',$message);
选项“U”代表Ungreedy,并尝试为所有可数元素(我指后跟“?”、“+”或“*”的元素)查找最短的出现时间,而不是最长的出现时间
您可以在此页面上有更多选项:
这个示例字符串是唯一的内容吗?请再提一点上下文/用例。不只是搜索{{tags}
抛开所有其他标记会更简单吗?@mario,请参阅更新的问题。跨距周围会有文本,并且会有多个跨距。除了之外还有其他标记吗?是的,可以有p标记、字体标记等。如果这有助于确定正在使用的可用标记类型,则在ckeditor中使用它。这个示例是stri吗ng唯一的内容?再多提一点上下文/用例。不只是搜索{{tags}
抛开所有其他标记会更简单吗?@mario,请参阅更新的问题。跨距周围会有文本,并且会有多个跨距。除了之外还有其他标记吗?是的,可以有p标记、字体标记等。如果这有助于确定正在使用的可用标记类型,则在ckeditor中使用它。这个示例是stri吗ng唯一的内容?再多提一点上下文/用例。不只是搜索{{tags}
抛开所有其他标记会更简单吗?@mario,请参阅更新的问题。跨距周围会有文本,并且会有多个跨距。除了之外还有其他标记吗?是的,可以有p标记、字体标记等。如果这有助于确定正在使用的可用标记类型,则在ckeditor中使用它。这个示例是stri吗唯一的内容是什么?请多提一下上下文/