Php 使用preg_split时主题字符串中的$1

Php 使用preg_split时主题字符串中的$1,php,special-characters,preg-split,Php,Special Characters,Preg Split,我想将文本拆分为一个数组,其中分隔符是“\n”中的一个或多个,然后将数组的内容作为元素放入无序的html列表中。当我使用preg_split执行此操作时,当主题字符串中有$1时,我会得到一个奇怪的结果。只需查看拆分后的数组,结果很好,并且$1似乎没有引起任何问题,但是当我循环数组并将其放入html列表时,它会创建一个与预期不同的结果(参见下面的示例) 如果这是主题字符串: “第一行 第二行1美元 第三行“ 它应成为: 一线 第二行1美元 第三行 但它变成了: 一线 二线 第二行1美元 第三

我想将文本拆分为一个数组,其中分隔符是“\n”中的一个或多个,然后将数组的内容作为元素放入无序的html列表中。当我使用preg_split执行此操作时,当主题字符串中有$1时,我会得到一个奇怪的结果。只需查看拆分后的数组,结果很好,并且$1似乎没有引起任何问题,但是当我循环数组并将其放入html列表时,它会创建一个与预期不同的结果(参见下面的示例)

如果这是主题字符串:

“第一行

第二行1美元

第三行“

它应成为:

  • 一线
  • 第二行1美元
  • 第三行
但它变成了:

  • 一线
  • 二线 第二行1美元 第三行
  • 第三行
有人知道为什么会这样吗? $1是某种具有保留意义的特殊html或php字符吗

这是我写的代码:

        $listElements = preg_split('/[\n]+/',$subject);
        $output = '<ul>';
        foreach ( $listElements as $val ) {
          $output .= '<li>' . $val . '</li>';
        }
        $output .= '</ul>';
$liselements=preg_split('/[\n]+/',$subject);
$output='
    '; foreach($val形式的列表元素){ $output.='
  • '.$val.
  • '; } $output.='
';
在PHP字符串中使用美元符号对那些不熟悉它的人来说有一种奇怪的效果

$foo = "BAR";
$example = "Hello, World! $foo $foo black sheep";
echo $example;
上面的例子是这样的:
Hello,World!黑羊酒吧
。这是因为变量在字符串中展开

停止这种行为的一种简单方法是使用单引号:将上述示例更改为“你好,世界!”$foo$foo害群之马'将回应此消息:
你好,世界$foo$foo害群之马
,美元将留在原地

阻止变量在双引号字符串中扩展的另一种方法是使用反斜杠对其进行转义:

$example = "Hello, World! \$foo \$foo black sheep";
将回应:

你好,世界$foo$foo害群之马



在您的示例中,我假设
$val
中有一个美元符号,需要转义。

Oki,很高兴知道。但我仍然不确定这是否是我的问题,或者如何解决它。我没有在任何地方使用双引号,所以这不是问题所在。我如何“逃离”1美元?(我也有点好奇$1是什么变量。我从来没有在代码中设置它,所以它从哪里来?)!我解决了这个问题$输出后来在preg_replace()中使用,我捕获了一个存储在$1中的东西。我可以重写模式,以便$1中不存储任何内容,但是如果我为我的模式进行匹配,那么$0不是总是设置的吗?所以我想这需要逃避。