【问题标题】:preg_match gives compilation failed errorpreg_match 给出编译失败错误
【发布时间】:2014-09-22 12:13:17
【问题描述】:

我是个正则表达式菜鸟,但我有一个问题需要解决。

我有一个包含以下内容的文本文件...

String 1
Some variable
String 2

我看过并认为我是赢家,但我得到一个错误

preg_match( '/(String 1)(?:[^])*(String 2)/', $string, $matches );

但我收到此错误

preg_match(): 编译失败:偏移 33 处的字符类缺少终止]

谁能帮我解决一下?

谢谢

【问题讨论】:

  • 你认为(?:[^])* 应该在你的正则表达式中做什么?
  • @anubhava: [^] 在 JavaScript 中是有效的 - 也许有人试图在没有使用适当工具的情况下移植正则表达式 (RegexBuddy)...

标签: php regex preg-match


【解决方案1】:

我相信您认为(?:[^])* 匹配任何字符“零次或多次”次。

在 Javascript 中,[^] 表示匹配任何字符的有效字符类。这对 PCRE 不起作用,它编译为不完整的字符类。使用点 . 而不是与 s(dotall)修饰符结合使用。

preg_match('/(String 1).*?(String 2)/s', $string, $matches);

【讨论】:

  • 这不是我关心的问题,OP 没有解释他/她在做什么。我只是指出错误。
  • 非常正确。我似乎已经“跳枪”并假设了。
  • 虽然我确信有一些东西可以更好地完成这项工作,但这非常适合我的需要!谢谢!
【解决方案2】:

也许简化它并使其变得公正;

/^(String 1|String 2)$/m

例如;

<?php

$s = <<<STR
String 1
Some variable
String 2
STR;

$output_array = array();
preg_match("/^(String 1|String 2)$/m", $s, $output_array);

echo print_r($output_array, true);

Live Preview

  • ^ - 匹配行/字符串的开头
  • (..) - 我们的捕获组
  • $ - 匹配行/字符串的结尾

【讨论】:

  • @M42 是的。我(错误地)假设 OP 只想匹配 String 1String 2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多