我有一个正则有限的正则表达式,它会让你更容易阅读以跨越多行。
我尝试了这个,但它只是barfs。
preg_match(
'^J[0-9]{7}:\s+
(.*?) #Extract the Transaction Start Date msg
\s+J[0-9]{7}:\s+Project\sname:\s+
(.*?) #Extract the Project Name
\s+J[0-9]{7}:\s+Job\sname:\s+
(.*?) #Extract the Job Name
\s+J[0-9]{7}:\s+',
$this->getResultVar('FullMessage'),
$atmp
);
是否有办法将上述表单中的正则表达式传递给preg_match?
答案 0 :(得分:5)
您可以使用扩展语法:
preg_match("/
test
/x", $foo, $bar);
答案 1 :(得分:3)
是的,您可以添加/x
Pattern Modifier。
这个修饰符会打开另外一个 PCRE的功能是 与Perl不兼容。任何反斜杠 在一个模式后面跟着一个 那封没有特别意义的信 导致错误,从而保留这些错误 未来扩张的组合。通过 默认情况下,如在Perl中,反斜杠 接下来没有特别的信 意义被视为文字。那里 目前没有其他功能 由此修饰符控制。
对于您的示例,请尝试以下操作:
preg_match('/
^J[0-9]{7}:\s+
(.*?) #Extract the Transaction Start Date msg
\s+J[0-9]{7}:\s+Project\sname:\s+
(.*?) #Extract the Project Name
\s+J[0-9]{7}:\s+Job\sname:\s+
(.*?) #Extract the Job Name
\s+J[0-9]{7}:\s+
/x', $this->getResultVar('FullMessage'), $atmp);
答案 2 :(得分:1)
好的,这是一个解决方案:
preg_match(
'/(?x)^J[0-9]{7}:\s+
(.*?) #Extract the Transaction Start Date msg
\s+J[0-9]{7}:\s+Project\sname:\s+
(.*?) #Extract the Project Name
\s+J[0-9]{7}:\s+Job\sname:\s+
(.*?) #Extract the Job Name
\s+J[0-9]{7}:\s+/'
, $this->getResultVar('FullMessage'), $atmp);
键的开头是(?x),这使得空格无关紧要并允许注释。
在起始和结束引号与开始和结束之间没有空格也很重要。正则表达式结束。
我的第一次尝试给出了错误:
preg_match('
/(?x)^J[0-9]{7}:\s+
(.*?) #Extract the Transaction Start Date msg
\s+J[0-9]{7}:\s+Project\sname:\s+
(.*?) #Extract the Project Name
\s+J[0-9]{7}:\s+Job\sname:\s+
(.*?) #Extract the Job Name
\s+J[0-9]{7}:\s+/
', $this->getResultVar('FullMessage'), $atmp);
什么Konrad said也起作用,感觉比开始时坚持(?x)更容易。
答案 3 :(得分:1)
答案 4 :(得分:0)
在PHP中,注释语法如下所示:
(?# Your comment here)
preg_match('
^J[0-9]{7}:\s+
(.*?) (?#Extract the Transaction Start Date msg)
\s+J[0-9]{7}:\s+Project\sname:\s+
(.*?) (?#Extract the Project Name)
\s+J[0-9]{7}:\s+Job\sname:\s+
(.*?) (?#Extract the Job Name)
\s+J[0-9]{7}:\s+
', $this->getResultVar('FullMessage'), $atmp);
有关详细信息,请参阅PHP Regular Expression Syntax Reference
您也可以使用PCRE_EXTENDED(或'x')Pattern Modifier,如Mark在其示例中所示。