PHP Preg replace-仅识别破折号、空格和分隔符
早上好,我有一个字符串,其中有表示为PHP Preg replace-仅识别破折号、空格和分隔符,php,preg-replace,Php,Preg Replace,早上好,我有一个字符串,其中有表示为-的中断。破折号的数量通常是不同的。有时有4个,有时有5个,等等 大概是这样的: Lorem ipsum <p>------</p> Lorem Ipsum <p>----------------</p> Lorem Ipsum <p>--------------</p> $search = "/(<p>-)[\h-]+(<\/p>)/"
-
的中断。破折号的数量通常是不同的。有时有4个,有时有5个,等等
大概是这样的:
Lorem ipsum
<p>------</p>
Lorem Ipsum
<p>----------------</p>
Lorem Ipsum
<p>--------------</p>
$search = "/(<p>-)[\h-]+(<\/p>)/";
$replace = "<p>-------------</p>";
$item = preg_replace($search,$replace,$item);
只要文本在最后一个破折号和
之间没有中断,这就可以正常工作。如何识别虚线、空格并捕获\n
例如:
-\n
您可以尝试查找模式-{1,}
,然后替换为所需的破折号,例如-
:
$input=“Lorem ipsum\n-->\nLorem ipsum\n-->\nLorem ipsum\n-->;
$output=preg_replace(“/\s*-{1,}\s*/”,“-”,$input);
echo$输出;
这张照片是:
Lorem ipsum
<p>-----</p>
Lorem Ipsum
<p>-----</p>
Lorem Ipsum
<p>-----</p>
Lorem ipsum
-----
乱数假文
-----
乱数假文
-----
您并不真正需要这3个捕获组。您可以使用[\h-]*
匹配零个或多个水平whitspace字符,并将其替换为------
例如,在您的代码中,开头和结尾总是有一个-
:
$item = <<<DATA
Lorem ipsum
<p>------</p>
Lorem Ipsum
<p>----------------</p>
Lorem Ipsum
<p>--------- -----</p>
DATA;
$search = "~<p>-[\h-]*-</p>~";
$replace = "<p>-------------</p>";
$item = preg_replace($search, $replace, $item);
echo $item;
$item=您只能将空格和破折号与[\h-]+
匹配注意:在编写问题时,请确保发布符合描述的示例。您说您的代码不起作用,但它在问题中的示例上运行得很好:谢谢,但这似乎只识别破折号(而不是破折号和空格)。因此,当出现“”----”时,preg_replace不会捕捉到中断。如何更正它?@Andreito然后尝试使用regex模式\s*-{1,}\s*
,它允许在
标记内部的任一端使用可选的空格。我尝试使用这个/(-)[\h-]+()//code>,似乎效果很好。但如果在最后一个破折号和之间有一个中断,则它不起作用。我如何识别虚线、空格,甚至捕捉到\n?请编辑您的问题并向我们揭示实际问题。谢谢,完成了。谢谢蒂姆!你的问题让我觉得有点不清楚,\n
。这是您试图解释换行符的方式,还是在换行符中有一个斜杠后跟一个n
?如果您只是想匹配一个不可见的换行符,那么将第四鸟的模式从\h
更改为\s
,就完成了。@如果您还想匹配换行符,可以使用\s
像$search=“~-[\s-]*-~”代码>
$item = <<<DATA
Lorem ipsum
<p>------</p>
Lorem Ipsum
<p>----------------</p>
Lorem Ipsum
<p>--------- -----</p>
DATA;
$search = "~<p>-[\h-]*-</p>~";
$replace = "<p>-------------</p>";
$item = preg_replace($search, $replace, $item);
echo $item;
Lorem ipsum
<p>-------------</p>
Lorem Ipsum
<p>-------------</p>
Lorem Ipsum
<p>-------------</p>