[英]php code not working xampp
我正在用正则表达式做某事,但是下面的代码无法以某种方式在我的计算机上工作。 我正在使用XAMPP软件包。 但是,当我在此网站https://ideone.com/nFkBnC上检查了我的php代码时,它正在工作。 为什么会这样呢?
<?php
$single="<div id='quote'>
</br><input onclick='this.select();' id='selectable' value='User
'></br><div class='content'>
^^^^^ MILAN TODAY ^^^^^
4
-4-
4444
44444
444444
4444444
44444444
444444444
*3333333333*
444444444
44444444
4444444
444444
44444
4444
444
44
4
*
# 670 # ((( 30 ))) # 370 #
# 789 # ((( 40 ))) # 370 #
***gl***
</br></div></div>";
if (preg_match('/(\R4{3,4}\D44\D)/', $single, $double)) {
echo "working";
}
?>
相同的代码在此站点上回显“有效”,但在我的电脑上为false。
在Windows中,换行符表示两个字符:换行符后的回车符: CR
+ LF
。 在使用基于模式的实用程序时,这两个字符几乎具有一种表示方式\\r\\n
。 但是类Unix的系统用一个字符表示换行符: LF
在Linux上的主机上运行脚本时,RegEx \\R4{3,4}\\D44\\D
可以工作,因为\\D
能够匹配换行\\n
( \\x0A
),并且立即匹配44
匹配项。
Here
_________
| |
4 4 4 4 . 4 4 4 . 4 4
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
\x04 \x04 \x04 \x04 \x0A \x04 \x04 \x04 \x0A \x04 \x04
但是在Windows中,情况有所不同。 \\D
与CR
( \\x0D
)匹配,但是跟在LF
( \\x0A
)之后的则永远不会匹配,因为您的引擎会立即查找44
。 因此整个模式失败。
Here
______________
| |
4 4 4 4 . . 4 4 4 . . 4 4
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
\x04 \x04 \x04 \x04 \x0D \x0A \x04 \x04 \x04 \x0D \x0A \x04 \x04
话虽如此,我相信347是Linux主机上strlen()
输出,而379是Windows主机上的输出。 基本数学运算得出的数字与您输入的字符串中的新行数相同:
379 - 347 = 32 // CR characters in Windows OS
但是,如果将RegEx更改为\\R4{3,4}\\D{1,2}44\\D
您将看到它起作用,或者如果您只是换行,则应将其真正更改为:
\R4{3,4}\R44\R
\\R
匹配任何换行符(即CR
+ LF
, LF
, CR
,...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.