繁体   English   中英

PHP代码无法正常工作

[英]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中,情况有所不同。 \\DCR\\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 + LFLFCR ,...)

暂无
暂无

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

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