PHP不会识别双行换行

时间:2014-06-17 13:47:59

标签: php regex restructuredtext

我正在运行RST到php转换并使用preg_match。

这是我想要确定的第一个:

An example of the **Horizon Mapping** dialog box is shown below. A 
summary of the main features is given below. 

.. figure:: horizon_mapping_dialog_horizons_tab.png 

   **Horizon Mapping** dialog box, *Horizons* tab 

Some of the input values to the **Horizon Mapping** job can be changed 
during a Workflow using the internal programming language, IPL. For 
details, refer to the *IPL User Guide*. 

我正在使用这个正则表达式:

$match = preg_match("/.. figure:: (.*?)(\n{2}[ ]{3}.*\n)/s", $text, &$result);

然而它返回为假。 这是一个关于正则表达式的表达式的链接 http://regex101.com/r/oB3fW7

2 个答案:

答案 0 :(得分:2)

您确定换行符是\n,有疑问,请使用\R

$match = preg_match("/.. figure:: (.*?)(\R{2}[ ]{3}.*\R)/s", $text, &$result);

\R代表\n\r\r\n

答案 1 :(得分:0)

我的直觉是围绕s标志以及通过引用传递的$result变量进行一些故障排除。要实现相同而不受点和返回变量的干扰,请试试这个正则表达式:

..[ ]figure::[ ]([^\r\n]*)(?:\n|\r\n){2}[ ]{3}[^\r\n]*\R

在代码中,请尝试完全像这样:

$regex = "~..[ ]figure::[ ]([^\r\n]*)(?:\n|\r\n){2}[ ]{3}[^\r\n]*\R~";
if(preg_match($regex,$text,$m)) echo "Success! </br>";

<强>最后:

如果这不起作用,你可能有一个奇怪的Unicode换行符,php没有捕获。要调试,对于字符串的每个字符,遍历所有字符串的字符

  1. 迭代:foreach(str_split($text) as $c) {
  2. 打印角色:echo $c . " value = "
  3. 打印this function. _uniord($c) . "<br />"; }
  4. 的值