PHP实现编译器思路,使用preg_split分割字符串和注释

PHP开发 | 2016-08-19 15:14:09 | 1486次阅读 | 1评
preg_split("/(\".*?\")/is", "good\n$str=\"字符串\";bye", -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

这样分割出来数组是:

=> [
     """
       good\n
       =
       """,
     ""字符串"",
     ";bye",
   ]
然后根据是不是引号"开头,如果是引号开头,则视为字符串

博友评论,共1条
Avatar
1楼:静夜思 发表于 2016-08-19 19:44  
根据引号判断字符串需要用到后向否定断言,排除被转义的引号:

>>> preg_split("/((?<!\\\\)\".*?(?<!\\\\)\")/is", '$str="3\"33";echo $str;', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
=> [
     "$str=",
     ""3\"33"",
     ";echo $str;",
   ]
>>>
浏览1455251次