Php #分隔符之间的正则表达式匹配

Php #分隔符之间的正则表达式匹配,php,regex,Php,Regex,我有一个字符串,完全如图所示,我试图匹配分隔符之间的内容 # a This is what should be matched/returned # \a #a和#\a是分隔符 # a This is what should be matched/returned # \a 不匹配的PHP/Regex: $str = <<<EOD # a this is what should be returned # \a EOD; preg_match("/#\sa\n(.*)

我有一个字符串,完全如图所示,我试图匹配分隔符之间的内容

# a
This is what should be matched/returned
# \a
#a
#\a
是分隔符

# a
This is what should be matched/returned
# \a
不匹配的PHP/Regex:

$str = <<<EOD

# a
this is what should be returned
# \a

EOD;

preg_match("/#\sa\n(.*)\n#\s\\a/m", $str, $matches);

/*
Array
(
)
*/
print_r($matches);
$str=有几种方法:

  • s
    用于
    匹配换行符的修饰符
  • \\\
    以退出
    \
  • 可能有一个
    \r\n
    而不是一个
    \n
    所以我使用了
    \s


  • 你到底为什么到处使用
    {1}

    {1}
    是怎么回事?你可以删除它们,没有它们的正则表达式是一样的。可能需要使用单引号或双转义反斜杠。另外,
    {1}
    不需要,因为字符本身代表一个字符。是否尝试添加多行修饰符
    “/{1}\s{1}a{1}\n{1}(.*)\n{1}\s{1}\\a{1}/m”
    这个{1}是多余的,因为它意味着只匹配一次。不管怎么说,你是否错过了php正则表达式的多行标志?别忘了投否决票,这是个很糟糕的问题;p谢谢,就这样。还有
    s
    modifier
    char在没有它的情况下无法匹配换行符。因此,您可能不需要第二个
    \s
    。或者您可以去掉
    s
    并使用
    \s+
    ,然后将
    添加到
    *
    。有几种方法。另外,可能希望使
    *
    不贪婪<代码>*?