Php 测试字符串中的反斜杠
因此,我正在编写一个PHP脚本,它将读取CSS文件,然后将注释和实际CSS放在单独的数组中。然后,该脚本将构建一个包含CSS和注释的页面,所有这些内容的格式都很好 脚本的基本逻辑如下: 换一行读 如果它以正斜杠或 以开口支架结束,设置一个 CSS或注释的bool为true 将该行添加到相应的 元素在适当的数组中 如果最后一个字符是反斜杠 评论的结尾或第一个 字符是一个结束括号 对于CSS标记,将必要的bool设置为 错误的 冲洗,重复 如果有人看到其中的错误,请随意指出,但我认为它应该做我想做的 棘手的部分是最后一个if语句,检查最后一个字符是否是反斜杠。现在我有:Php 测试字符串中的反斜杠,php,string,Php,String,因此,我正在编写一个PHP脚本,它将读取CSS文件,然后将注释和实际CSS放在单独的数组中。然后,该脚本将构建一个包含CSS和注释的页面,所有这些内容的格式都很好 脚本的基本逻辑如下: 换一行读 如果它以正斜杠或 以开口支架结束,设置一个 CSS或注释的bool为true 将该行添加到相应的 元素在适当的数组中 如果最后一个字符是反斜杠 评论的结尾或第一个 字符是一个结束括号 对于CSS标记,将必要的bool设置为 错误的 冲洗,重复 如果有人看到其中的错误,请随意指出,但我认为它应该做我想做的
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语句仍然失败。不过,我确实意识到了一个重要的问题——评论的结尾是正斜杠,而不是反斜杠。问题解决了!