Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP preg_替换除括号中的文本以外的所有内容_Php_Html_Regex_Preg Replace - Fatal编程技术网

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吗唯一的内容是什么?请多提一下上下文/