繁体   English   中英

PHP Regex在同一行上分别匹配模式

[英]PHP Regex matches pattern separately on the same line

我正在尝试使用php regex解析文本。 我写了一个符合所有条件的模式匹配。 我不想要这个。 它必须在同一行上分别匹配目标。

模式:

/\((?P<type>\w+)((,)*(?P<params>[\d\w\:]+))((,)*(?P<comment>.*))\)/u

目标数据字符串:

lorem ipsum dolor (photo,61) test (photo,62,some text) (video,63) sit amet etc

结果为preg_match_all和PREG_SET_ORDER标志:

array (size=1)
0 => 
    array (size=11)
      0 => string '(photo,61) test (photo,62,some text) (video,63)' (length=47)
      'type' => string 'photo' (length=5)
      1 => string 'photo' (length=5)
      2 => string ',61' (length=3)
      3 => string ',' (length=1)
      'params' => string '61' (length=2)
      4 => string '61' (length=2)
      5 => string ') test (photo,62,some text) (video,63' (length=37)
      6 => string '' (length=0)
      'comment' => string ') test (photo,62,some text) (video,63' (length=37)
      7 => string ') test (photo,62,some text) (video,63' (length=37)

如果目标数据放在单独的行中,并且执行相同的正则表达式模式,则结果为; (我想要这些结果,但没有换行)

lorem ipsum dolor 
(photo,61) test 
(photo,62,some text) 
(video,63) sit amet etc

array (size=3)
    0 => 
        array (size=11)
          0 => string '(photo,61)' (length=10)
          'type' => string 'photo' (length=5)
          1 => string 'photo' (length=5)
          2 => string ',61' (length=3)
          3 => string ',' (length=1)
          'params' => string '61' (length=2)
          4 => string '61' (length=2)
          5 => string '' (length=0)
          6 => string '' (length=0)
          'comment' => string '' (length=0)
          7 => string '' (length=0)
      1 => 
        array (size=11)
          0 => string '(photo,62,some text)' (length=20)
          'type' => string 'photo' (length=5)
          1 => string 'photo' (length=5)
          2 => string ',62' (length=3)
          3 => string ',' (length=1)
          'params' => string '62' (length=2)
          4 => string '62' (length=2)
          5 => string ',some text' (length=10)
          6 => string ',' (length=1)
          'comment' => string 'some text' (length=9)
          7 => string 'some text' (length=9)
      2 => 
        array (size=11)
          0 => string '(video,63)' (length=10)
          'type' => string 'video' (length=5)
          1 => string 'video' (length=5)
          2 => string ',63' (length=3)
          3 => string ',' (length=1)
          'params' => string '63' (length=2)
          4 => string '63' (length=2)
          5 => string '' (length=0)
          6 => string '' (length=0)
          'comment' => string '' (length=0)
          7 => string '' (length=0)

谢谢你的帮助。

只需使用代替

'~\(.*?\)~'

它会完成的

Regex101 评估

我发现一个解决方案不影响换行符(根本解决方案是在不使用“ /.../”的情况下以“〜...〜”括起来)

~\((\w+),([\d|:]+),*(.*?)\)~u

命名版本;

~\((?P<type>\w+),(?P<params>[\d|:]+),*(?P<comment>.*?)\)~u

感谢@Uchiha前置解决方案,也感谢您提供的提示。

'~\(.*?\)~'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM