[英]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.