繁体   English   中英

正则表达式中的奇怪行为

[英]Strange behavior in a Regex

我正在替换<p>标签的空行。 对于一个<p>标记,正则表达式替换允许空格(\\ s)的所有黑线。

例如这个字符串:

$string="with.\n\n\n\nTherefore";

但是返回2 <p>标签。

所以,我做了这个测试:(不是替换

,仅供测试)

$string="with.\n\n\n\nTherefore";
$string=preg_replace('/(^)(\s*)($)/m','[$1]|$2|($3)',$string);
echo $string;

并检查返回的内容:

with.
[]|

|()[]||()
Therefore

想象:

with.\n
^\n
\n
$^\n$\n
Therefore

正则表达式添加一个\\ n,第四个不执行“她”必须做的事情。(跳转到另一行)。

有人可以提供帮助。 基本上解释而不是解决问题。 谢谢evryone。

你的正则表达式应该至少匹配一个空白字符。 所以用\\s+替换\\s*或者如果它需要转义\\s\\+


\\s*将每一个字符匹配,这是因为它匹配任何( * )的空白( \\s ),而且由于任何它包括没有 没有,我的意思是在字符串'abc' \\s*中将匹配' ^ '和' a ',' a '和' b ',' b '和' c ',' c '之间的“ ”字符和' $ '。

在linux终端上测试真的很容易:

$ echo "abc" | sed 's:\s*:\n:g'  # replace \s* with \n for the whole string 

a
b
c

$ # ^ the result

正如您所看到的,它匹配每个“空”字符并用\\n替换它

另一方面\\s+将强制正则表达式匹配至少1+ )个空格( \\s )字符,因此它的工作方式与所选。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM