Regex不适用于PHP,但适用于Ruby

时间:2014-11-13 11:54:29

标签: php regex

我有一个适用于Ruby的正则表达式,但在PHP中不起作用:

$filename = 'files/Dial.txt';
$input_lines=fonl($filename,80);
echo $input_lines;
$pattern = "^\[(?<DateTime>[^]]+)\]\s+(?<TypeConnection>\b.*?(?:\W+\w+)}?\W+.*?\b)\s+'(?<User>.*?)'\s+(?<Detail>.*?$)";
//$pattern = preg_quote($pattern, '/');
preg_match_all("/".$pattern."/", $input_lines, $output_array);
print_r($output_array);

并显示以下错误

  

警告:preg_match()[function.preg-match]:未知修饰符&#39;]&#39;在第11行的C:\ xampp \ htdocs \ REGEX \ index.php

这个正则表达式句子有什么问题?

2 个答案:

答案 0 :(得分:0)

使用不同的正则表达式分隔符,不要忘记启用多行修饰符(?m),以便让正则表达式在多行上运行。

$filename = 'files/Dial.txt';
$input_lines=fonl($filename,80);
echo $input_lines;
$pattern = "(?m)^\[(?<DateTime>[^]]+)\]\s+(?<TypeConnection>\b.*?(?:\W+\w+)}?\W+.*?\b)\s+'(?<User>.*?)'\s+(?<Detail>.*?$)";
//$pattern = preg_quote($pattern, '/');
preg_match_all("~".$pattern."~", $input_lines, $output_array);
print_r($output_array);

答案 1 :(得分:0)

检查示例我希望它对你有用: -

preg_match("/(?<DateTime>[^]]+)\]\s+(?<TypeConnection>\b.*?(?:\W+\w+)}?\W+.*?\b)\s+'(?<User>.*?)'\s+   
(?<Detail>.*?$)", "2014-11-01 14:40:02", $results)