PHP正则表达式换行符

PHP正则表达式换行符,php,regex,line-breaks,Php,Regex,Line Breaks,关于使用换行符提取注释的简单正则表达式问题: 字符串: <description language="de">Diese Tabelle zeigt die Zugangswege der Besucher auf die Website</description> <options> <!-- Hier stehen die Optionen für den View, die sich nicht auf colums be

关于使用换行符提取注释的简单正则表达式问题:

字符串:

   <description language="de">Diese Tabelle zeigt die Zugangswege der Besucher auf die Website</description>

   <options>
      <!-- Hier stehen die Optionen für den View, die sich nicht auf colums beziehen.
           Bisher gibt es da nix, kann aber mal nicht schaden das vorzusehen  -->
   </options>


   <defaultcolumn>
      <!-- Hier können für Basiswerte für alle Spalten definiert werden. 
           Die Spaltendefinition weiter unten gibt die Möglichkeit die Werte je Spalte zu überschreiben
           Welche Optionen es gibt (incl. Titel, Description und Emptycelltext) siehe "allvaluescolumn" oben. 
      -->
      <options>
         <option name="align" value="left"><!-- (left|center|right), default left --></option>
/<!--(.*)-->/
Diese Tabelle zeigt die Zugangswege der Besucher auf die网站
我的正则表达式尝试:

   <description language="de">Diese Tabelle zeigt die Zugangswege der Besucher auf die Website</description>

   <options>
      <!-- Hier stehen die Optionen für den View, die sich nicht auf colums beziehen.
           Bisher gibt es da nix, kann aber mal nicht schaden das vorzusehen  -->
   </options>


   <defaultcolumn>
      <!-- Hier können für Basiswerte für alle Spalten definiert werden. 
           Die Spaltendefinition weiter unten gibt die Möglichkeit die Werte je Spalte zu überschreiben
           Welche Optionen es gibt (incl. Titel, Description und Emptycelltext) siehe "allvaluescolumn" oben. 
      -->
      <options>
         <option name="align" value="left"><!-- (left|center|right), default left --></option>
/<!--(.*)-->/
//
这将提取所有单行注释

问题:

   <description language="de">Diese Tabelle zeigt die Zugangswege der Besucher auf die Website</description>

   <options>
      <!-- Hier stehen die Optionen für den View, die sich nicht auf colums beziehen.
           Bisher gibt es da nix, kann aber mal nicht schaden das vorzusehen  -->
   </options>


   <defaultcolumn>
      <!-- Hier können für Basiswerte für alle Spalten definiert werden. 
           Die Spaltendefinition weiter unten gibt die Möglichkeit die Werte je Spalte zu überschreiben
           Welche Optionen es gibt (incl. Titel, Description und Emptycelltext) siehe "allvaluescolumn" oben. 
      -->
      <options>
         <option name="align" value="left"><!-- (left|center|right), default left --></option>
/<!--(.*)-->/
如何获得所有评论?还有多行的?添加
\n
\r\n\
未成功

试试看

/<!--(.*?)-->/s
//s
默认不匹配换行符,因此您需要在regex分隔符后使用
s
启用
dotall
模式。(
s
singleline
修饰符,它将整个字符串视为一行,即使点也与新行匹配。)

然后,我通过在量词后面添加一个
,使量词ungreedy,否则它将从第一个开始标记匹配到最后一个结束标记。

正确的方法是,在处理(X)HTML/XML字符串时,通常不使用regex,而是使用and

要获取文档中的所有注释,您需要的XPath查询是:

//comment()
例如:

$str = '<description language="de">Diese Tabelle zeigt die Zugangswege der Besucher auf die Website</description>

<options>
  <!-- Hier stehen die Optionen für den View, die sich nicht auf colums beziehen.
       Bisher gibt es da nix, kann aber mal nicht schaden das vorzusehen  -->
</options>


<defaultcolumn>
  <!-- Hier können für Basiswerte für alle Spalten definiert werden. 
       Die Spaltendefinition weiter unten gibt die Möglichkeit die Werte je Spalte zu überschreiben
       Welche Optionen es gibt (incl. Titel, Description und Emptycelltext) siehe "allvaluescolumn" oben. 
  -->
  <options>
     <option name="align" value="left"><!-- (left|center|right), default left --></option>';

$doc = new DOMDocument('1.0');
@$doc->loadHTML($str);
$xpath = new DOMXPath($doc);

$nodes = $xpath->query('//comment()');

$comments = array();

foreach ($nodes as $node) {
    $comments[] = trim($node->nodeValue);
}

print_r($comments);
$str='Diese Tabelle zeigt die Zugangswege der Besucher auf die网站
';
$doc=新DOMDocument('1.0');
@$doc->loadHTML($str);
$xpath=新的DOMXPath($doc);
$nodes=$xpath->query('//comment()');
$comments=array();
foreach($node作为$node){
$comments[]=trim($node->nodeValue);
}
打印(评论);

工作正常。谢谢7分钟后接受@Azincourt你忘了吗?谢谢你的回答,不过我想要一个正则表达式解决方案。我将在将来使用xpath。@Azincourt,我建议您使用这个答案,而不是使用正则表达式。当面临更复杂的问题时,不仅正则表达式非常困难,而且XPath是一个对象——一个工具——专门设计用于搜索这些类型的字符串。实际上,我目前并没有在生产中使用它,而是一个简短的代码段。我只是想删除单个文件中的注释,并想知道为什么我的正则表达式是错误的。这就是为什么我说我将来会使用它。