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>