我正在尝试使用 php 正则表达式解析文本。我写了一个模式匹配,所有东西都符合要求。我不想要它。它必须在同一行上单独匹配目标。
模式:
/\((?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_SET_ORDER标志的结果preg_match_all:
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)
谢谢你的帮助。
我找到了一个不受影响的换行符的解决方案(激进的解决方案是用“~...~”括起来,而不是使用“/.../”)
~\((\w+),([\d|:]+),*(.*?)\)~u
命名版本;
~\((?P<type>\w+),(?P<params>[\d|:]+),*(?P<comment>.*?)\)~u
感谢@Uchiha预解决方案和感谢给出的提示。
'~\(.*?\)~'
只需使用
'~\(.*?\)~'
它会完成的
正则表达式101评估
问题 你正在试着使用正则表达式去匹配一大块的文本,而你需要跨越多行去匹配。 解决方案 这个问题很典型的出现在当你用点(.)去匹配任意字符的时候,忘记了点(.)不能匹配换行符的事实。 比如,假设你想试着去匹配C语言分割的注释: >>> comment = re.compile(r'/\*(.*?)\*/') >>> text1 = '/* this is a comment */' >>> text
我的函数每次我调用它抱怨非穷尽模式时都会抛出一个异常 并行检查的定义如下: 在应用了-Wall的GHCI中运行函数只会返回 我对哈斯克尔相当陌生,也相当困惑。我认为模式匹配与和应该解决这个问题。
TL;dr:我如何用pcregrep来拆分每一个多行匹配? 长版本:我有一些文件,有些行以(小写)字符开头,有些以数字或特殊字符开头。如果我至少有两行彼此相邻,以小写字母开头,我希望在我的输出中这样做。但是,我希望每个发现都被分隔/拆分,而不是相互附加。这是正则表达式: 所以,如果我提供这样的文件: 给出的结果是 然而,我想要的是这个: 这可能吗和/或我必须开始使用Python(或类似)?即使建议
一、模式匹配 Scala 支持模式匹配机制,可以代替 swith 语句、执行类型检查、以及支持析构表达式等。 1.1 更好的swith Scala 不支持 swith,可以使用模式匹配 match...case 语法代替。但是 match 语句与 Java 中的 switch 有以下三点不同: Scala 中的 case 语句支持任何类型;而 Java 中 case 语句仅支持整型、枚举和字符串常
主机权限和 内容脚本匹配 是基于匹配模式定义的一组 URL。匹配模式本质上是一个以允许的 schema(http,https,file 或ftp 开头)的URL,并且可以包含 “*” 字符。特殊模式 < all_urls > 匹配以允许的 schema 开头的任何 URL。 每个模式包含 3 个部分: schema - 例如,http 或file 或 * 注意:对文件 URL 的访问不是自动的。用
MySQL提供了一个标准的SQL模式匹配,和基于扩展的正则表达式的模式匹配Unix工具(如vi,grep,sed)一样。 SQL模式匹配可以使用“_“来匹配任意单个字符,”%“可以用来匹配任意数量(包含0个字符)的字符。在MySQL中,SQL模式匹配的大小写默认是不敏感的,以下有一些例子,当你在使用SQL模式时,不要使用 = 或 <>,而是使用LIKE 或 NOT LIKE。 要找到以字符“b"开