我有一个正则表达式,最终会有点长,它会让它更容易阅读,让它跨越多行。

我试过这个,但它只是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?

===============>>#1 票数:5 已采纳

您可以使用扩展语法:

preg_match("/
    test
/x", $foo, $bar);

===============>>#2 票数:3

是的,您可以添加/x Pattern Modifier

此修饰符打开与Perl不兼容的PCRE的其他功能。 模式中的任何反斜杠后跟一个没有特殊含义的字母都会导致错误,从而为将来的扩展保留这些组合。 默认情况下,如在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);

===============>>#3 票数: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);

康拉德所说的工作和感觉比开始时坚持(?x)更容易。

===============>>#4 票数:1

  • 您应该添加分隔符:正则表达式的第一个字符将用于指示模式的结尾。
  • 你应该添加'x'标志。 这与在开始时放置(?x)具有相同的结果,但它更具可读性。

===============>>#5 票数: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正则表达式语法参考

您还可以使用PCRE_EXTENDED(或“x”) 模式修改器,如Mark在其示例中所示。

  ask by Mark Biek translate from so

未解决问题?本站智能推荐:

2回复

preg_match与正则表达式不匹配

我正在尝试使用正则表达式和pregmatch从网站上抓取10位数字。 到目前为止还没有得到任何结果。 当我使用前两个注释中的$ regex变量之类的常规字符时,它匹配。 但是当我像其他人一样使用正则表达式时却没有。 我在这里检查了所有其他类似的问题。 但是还无法理解为什么以下正则表
2回复

正则表达式和preg_match()

我是正常表达的疯狂绿色。 这是我要完成的工作:我需要一个8个字符的密码,该密码允许使用大写和小写字母,数字和!@#$%^&* -_字符。 以下是我看似不起作用的内容: preg_match('([A-za-z0-9-_!@#$%^&*]{8,})', $password)
1回复

PHP - 正则表达式(preg_match)

我想preg匹配第三个链接并获得“D3”。 我不希望它与其他两个链接匹配。 这就是它应该检查链接在开头或结尾是否有空格的原因。 我知道要与空格匹配,表达式是\\s 。 我尝试但不知怎的,我没有得到它。 :(
2回复

preg_match的正则表达式[重复]

这个问题在这里已有答案: 你如何在PHP中解析和处理HTML / XML? 30个答案 我得到了以下字符串: 并希望拥有“XX,X”,所以我构建以下正则表达式: /QmCC" alt="" width="auto" height="auto" \\/&
3回复

PHP preg_match正则表达式(2)

大家好,我遇到了问题,我有以下代码: 我需要在screenfile=之后获取该值,例如以下内容: http : screenfile= ,但是我不知道该怎么做,并且还需要替换宽度和高度属性。
2回复

PHP正则表达式和preg_match

我有一个我需要匹配的字符串,可以是各种格式: 我需要在等号(=)和管道(|)符号之间出现的数字,或者行的末尾。 因此,在最后一个例子,我需要98 , 32 , 21 , 3 , 44 , 11 ,但我不知道这一点的。 数字不具体,可以是任意数量的数字。 我只是学习正则表达式和p
1回复

PHP Preg_match正则表达式结果

这是我的RE,我将其与preg_match_all PHP一起使用,但是得到的结果不准确http://screencast.com/t/FPsoJkAT 我收到多余的行(空行+ PM和AM),应该跳过 当我尝试使用RE Utility进行测试时,这是预期的结果。 http://s
1回复

preg_match和正则表达式

我正在尝试从网页获取网站地址。 模式始终为: 我需要的部分是www.website.com。 看了很多书后,我做了这个。 但是我想我做错了...有人可以帮助我吗? 我把我的“解决方案”放在了方括号之间,因为stackoverflow使它一团糟。
2回复

正则表达式preg_match字

我正在尝试获取以例如Name:开头的字符串的一部分。 如果整个字符串看起来像Name: Carl ,我只想要Carl部分而不是Name:前缀。 我怎样才能做到这一点? 我尝试过: 但我得到了输出: array(1){[0] => string(28)“姓名:Ca
4回复

PHP的preg_match正则表达式

仍存在RegEx问题。需要匹配以下字符 a-zA-z9-0,。 ' “ ( ) _ - : (空间) 并非所有值都具有所有这些值,但可以具有它们。 除了括号外,我所有的东西都枯萎了,单双节 更新: 我用它来工作: "/^[\\w. ,:()'\\"-]+$/"