测试字符串中的反斜杠

时间:2010-12-19 18:41:04

标签: php string

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

脚本的基本逻辑是:

  • 阅读新内容
  • 如果以正斜杠开头或 以开口支架结束,设置一个 bool for CSS或评论为true
  • 将该行添加到相应的行 适当数组中的元素
  • 如果最后一个字符是反斜杠 (评论的结尾)或第一个 字符是一个结束括号(结束 一个CSS标签),设置必要的bool 假
  • 冲洗,重复

如果有人发现错误,请随意指出,但我认为应该按照我的意愿行事。

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

if ($line{(strlen($line) - 3)} == "\\") {do stuff}

其中$ line是从文件读入的最后一行。不完全确定为什么我必须返回3个字符,但我猜它是因为从文件中读取它时每个字符串末尾都有一个换行符。但是,这个if语句永远不会成立,即使有明确的行以斜杠结尾。此

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

甚至返回反斜杠,但if语句永远不会被触发。

2 个答案:

答案 0 :(得分:0)

那是因为你的if语句中的$ line {(strlen($ line) - 3)}返回一个反斜杠,而if语句则查找两个反斜杠。尝试使用

substr($line, -2)

代替。 (您可能需要将其更改为-3。原因是因为换行符可能包含在字符串的末尾。)

答案 1 :(得分:0)

@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
    }
}
?>