Php Reg表达式是否删除空标记(其中任何一个)?
我喜欢删除任何空的或包含空格的空html标记 想要得到的东西:Php Reg表达式是否删除空标记(其中任何一个)?,php,regex,Php,Regex,我喜欢删除任何空的或包含空格的空html标记 想要得到的东西: $string = "<b>text</b><b><span> </span></b><p> <br/></p><b></b><font size='4'></font>"; $string=“text”; 致: $string=“text=; 您需要多次运行代码,以便仅使
$string = "<b>text</b><b><span> </span></b><p> <br/></p><b></b><font size='4'></font>";
$string=“text
”;
致:
$string=“text=;
您需要多次运行代码,以便仅使用正则表达式执行此操作
执行此操作的正则表达式是:
/<(?:(\w+)(?: [^>]*)?`> *<\/$1>)|(?:<\w+(?: [^>]*)?\/>)/g
/]*)?`>*)|(?:]*)?\/>)/g
但例如,在字符串上,您必须至少运行两次。一次它将删除
,第二次将删除剩余的,您需要多次运行代码,以便仅使用正则表达式执行此操作
function stripEmptyTags ($result)
{
$regexps = array (
'~<(\w+)\b[^\>]*>\s*</\\1>~',
'~<\w+\s*/>~'
);
do
{
$string = $result;
$result = preg_replace ($regexps, '', $string);
}
while ($result != $string);
return $result;
}
$string = "<b>text</b><b><span> </span></b><p> <br/></p><b></b><font size='4'></font>";
echo stripEmptyTags ($string);
执行此操作的正则表达式是:
/<(?:(\w+)(?: [^>]*)?`> *<\/$1>)|(?:<\w+(?: [^>]*)?\/>)/g
/]*)?`>*)|(?:]*)?\/>)/g
但例如,在字符串上,您必须至少运行两次。一次将删除
,第二次将删除剩余的函数条空标签($result)
function stripEmptyTags ($result)
{
$regexps = array (
'~<(\w+)\b[^\>]*>\s*</\\1>~',
'~<\w+\s*/>~'
);
do
{
$string = $result;
$result = preg_replace ($regexps, '', $string);
}
while ($result != $string);
return $result;
}
$string = "<b>text</b><b><span> </span></b><p> <br/></p><b></b><font size='4'></font>";
echo stripEmptyTags ($string);
{
$regexps=数组(
“~]*>\s*~”,
'~~'
);
做
{
$string=$result;
$result=preg_replace($regexps,,$string);
}
而($result!=$string);
返回$result;
}
$string=“text
”;
回音条空标签($string);
功能条清空标签($result)
{
$regexps=数组(
“~]*>\s*~”,
'~~'
);
做
{
$string=$result;
$result=preg_replace($regexps,,$string);
}
而($result!=$string);
返回$result;
}
$string=“text
”;
回音条空标签($string);
以下是一种方法:
这将输出如下内容
<body><b>text</b></body>
文本
XML文档需要一个根元素,因此无法忽略它。不过,您可以str\u替换它。
如果要有选择地删除特定节点,请调整XPath查询
也看到
以下是一种方法:
这将输出如下内容
<body><b>text</b></body>
文本
XML文档需要一个根元素,因此无法忽略它。不过,您可以str\u替换它。
如果要有选择地删除特定节点,请调整XPath查询
也看到
关于
标记或其他有意义的标记呢?关于第1行
第2行呢?关于空的
标记呢?你能更好地描述你的目的吗?试着解释你想做什么,而不是你认为应该怎么做。一般来说,用正则表达式解析html是个坏主意。改用xml解析器lso,我假设它应该是$string=“text";代码>,但这可能只是一个输入错误。
标签或其他有意义的标签呢?第1行如何?空的
标签怎么样?你能更好地描述你的目的吗?试着解释你想做什么,而不是你认为应该怎么做。一般来说,用正则表达式解析html是个坏主意。使用xml解析器也可以,我假设它应该是$string=“text”代码>,但这可能只是一个输入错误。这就可以了。还有1个问题:1)我如何告诉函数应该删除哪些标记,比如我只需要删除:p、a和span标记。经过深思熟虑,我真的认为应该使用DOM方法,而不是更可靠。我将函数的一部分更改为:(但现在根本不起作用)$regexps=array(“~]*>\s*~”,“~~”);与可实现性相关:在我的例子中,我将只对html文档的某些部分中的文本使用您的函数,但我不会对整个html文档使用它。然后我认为这不会是一个大问题。您认为如何?标记枚举版本的问题是您永远不知道这些标记将是什么。对于第一个regexp,使用“~]*>\s*~”。这是do工作。还有1个问题:1)我如何告诉函数应该删除哪些标记,假设我只需要删除:p、a和span标记。经过深思熟虑后,我真的认为你应该使用DOM方法,因为它更可靠。我将函数的一部分改为:(但现在根本不起作用)$regexps=array(“~]*>\s*~”,“~~”);与可实现性相关:在我的例子中,我将只对html文档的某些部分中的文本使用您的函数,但我不会对整个html文档使用它。然后我认为这不会是一个大问题。您认为如何?标记枚举版本的问题是您永远不知道这些标记将是什么。对于第一个regexp,使用“~]*>\s*~”。