Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 测试字符串中的反斜杠_Php_String - Fatal编程技术网

Php 测试字符串中的反斜杠

Php 测试字符串中的反斜杠,php,string,Php,String,因此,我正在编写一个PHP脚本,它将读取CSS文件,然后将注释和实际CSS放在单独的数组中。然后,该脚本将构建一个包含CSS和注释的页面,所有这些内容的格式都很好 脚本的基本逻辑如下: 换一行读 如果它以正斜杠或 以开口支架结束,设置一个 CSS或注释的bool为true 将该行添加到相应的 元素在适当的数组中 如果最后一个字符是反斜杠 评论的结尾或第一个 字符是一个结束括号 对于CSS标记,将必要的bool设置为 错误的 冲洗,重复 如果有人看到其中的错误,请随意指出,但我认为它应该做我想做的

因此,我正在编写一个PHP脚本,它将读取CSS文件,然后将注释和实际CSS放在单独的数组中。然后,该脚本将构建一个包含CSS和注释的页面,所有这些内容的格式都很好

脚本的基本逻辑如下:

换一行读 如果它以正斜杠或 以开口支架结束,设置一个 CSS或注释的bool为true 将该行添加到相应的 元素在适当的数组中 如果最后一个字符是反斜杠 评论的结尾或第一个 字符是一个结束括号 对于CSS标记,将必要的bool设置为 错误的 冲洗,重复 如果有人看到其中的错误,请随意指出,但我认为它应该做我想做的

棘手的部分是最后一个if语句,检查最后一个字符是否是反斜杠。现在我有:

if ($line{(strlen($line) - 3)} == "\\") {do stuff}
其中,$line是从文件中读入的最后一行。不完全确定为什么我必须返回3个字符,但我猜这是因为从文件中读取字符串时,每个字符串的末尾都有一个换行符。然而,这个if语句从来都不是真的,即使肯定有以斜杠结尾的行。这个

echo "<br />str - 3: " . $line{(strlen($line)-3)};

即使返回反斜杠,if语句也不会触发。

这可能是因为if语句中的$line{strlen$line-3}返回一个反斜杠,而if语句查找两个。试用

substr($line, -2)

相反。您可能必须将其更改为-3。这是因为换行符可能包含在字符串的末尾。

@mcritelli:CSS注释看起来像/*comment*/但是,只搜索反斜杠不会告诉您它是开始还是结束注释。这里有一个我测试过的非常基本的脚本,它通过一行循环,可以在注释的开头和结尾做一些事情-

<?php
$line  = "/* test rule */";
$line .= ".test1 { ";
$line .= "  text-decoration: none; ";
$line .= "}/* end of test rule */";

for ($i = 0; $i < strlen($line); $i++) 
{
    if ($line[$i] . $line[$i + 1] == "/*")
    {
        // start of a comment, do something
    }
    elseif ($line[$i] . $line[$i + 1] == "*/")
    {
        // end of a comment, do something
    }
}
?>

你们试过在循环前给新行添加一些字符吗?你们能详细解释一下你们的意思吗?我检查了$line,在测试时它肯定包含一个字符串。您可能有\r\n、\r或\n行结尾。但是反斜杠不需要转义吗?我以为if语句实际上是测试一个斜杠,而不是两个。嗯,我道歉。我没想过。在这种情况下,我不确定出了什么问题,但我仍然认为substr在这种情况下会是一个更好的路由。我也尝试了一个substring,它返回一个反斜杠,但if语句仍然失败。不过,我确实意识到了一个重要的问题——评论的结尾是正斜杠,而不是反斜杠。问题解决了!