需要一个非常简单的Regualr表达式

问题描述 投票:0回答:1

我对REGX非常感兴趣(实际上我几乎一无所知)。这是我的一周。但是我需要一个正则表达式,通过它我可以处理当前的项目。我的文字是这样的

\vspace{3pt} \noindent
\begin{tabular}{|p{464pt}|}
\hline
\parbox{464pt}{\raggedright 
1
} \\
\hline
\parbox{464pt}{\raggedright 
কত ভাগ পানি প্রক্সিমাল প্যাঁচানো নালিকায় শোষিত হয়?
} \\
\hline
\parbox{464pt}{\raggedright 
4
} \\
\hline
\parbox{464pt}{\raggedright 
৫৫\%
} \\
\hline
\parbox{464pt}{\raggedright 
৪৫\%
} \\
\hline
\parbox{464pt}{\raggedright 
৮০\%
} \\
\hline
\parbox{464pt}{\raggedright 
৬৫\%
} \\
\hline
\parbox{464pt}{\raggedright 
3
} \\
\hline
\end{tabular}
\vspace{2pt}

您可以看到它的乳胶。现在我需要的是获取\hline\\

之间的文本

例如,从第三行到第六行,您可以看到它以\hline开头,以\\结束。我需要这些之间的文字。但是我不知道确切的正则表达式。我尝试了一些在网上找到的内容,并对其进行了编辑,但自最近两天以来一直尝试失败。

这里有人帮助我提供正确的正则表达式吗?我正在使用PHP。正则表达式应从上面的给定文本返回8个文本数组。

regex preg-match-all
1个回答
1
投票

您必须加倍转义反斜杠:

$in = <<<'EOD'
\vspace{3pt} \noindent
\begin{tabular}{|p{464pt}|}
\hline
\parbox{464pt}{\raggedright 
1
} \\
\hline
\parbox{464pt}{\raggedright 
কত ভাগ পানি প্রক্সিমাল প্যাঁচানো নালিকায় শোষিত হয়?
} \\
\hline
\parbox{464pt}{\raggedright 
4
} \\
\hline
\parbox{464pt}{\raggedright 
৫৫\%
} \\
\hline
\parbox{464pt}{\raggedright 
৪৫\%
} \\
\hline
\parbox{464pt}{\raggedright 
৮০\%
} \\
\hline
\parbox{464pt}{\raggedright 
৬৫\%
} \\
\hline
\parbox{464pt}{\raggedright 
3
} \\
\hline
\end{tabular}
\vspace{2pt}
EOD;

preg_match_all('/(?<=\\\\hline)(?:(?!\\\\\\\\)[\s\S])+(?=\\\\\\\\)/', $in, $m);
print_r($m);

输出:

Array
(
    [0] => Array
        (
            [0] => 
\parbox{464pt}{\raggedright 
1
} 
            [1] => 
\parbox{464pt}{\raggedright 
কত ভাগ পানি প্রক্সিমাল প্যাঁচানো নালিকায় শোষিত হয়?
} 
            [2] => 
\parbox{464pt}{\raggedright 
4
} 
            [3] => 
\parbox{464pt}{\raggedright 
৫৫\%
} 
            [4] => 
\parbox{464pt}{\raggedright 
৪৫\%
} 
            [5] => 
\parbox{464pt}{\raggedright 
৮০\%
} 
            [6] => 
\parbox{464pt}{\raggedright 
৬৫\%
} 
            [7] => 
\parbox{464pt}{\raggedright 
3
} 
        )

)

说明:

(?<=\\\\hline)          # positive lookbehind, make sure we have \hline before
(?:                     # non capture group
    (?!\\\\\\\\)        # negaive lookahead, make sure we haven't 2 backslashes
    [\s\S]              # any character, including linebreaks
)+                      # end group, may appear 1 or more times
(?=\\\\\\\\)            # positive lookahead, make sure we have 2  backslashes after
© www.soinside.com 2019 - 2024. All rights reserved.