Нужно очень простое выражение Regualr - PullRequest
0 голосов
/ 22 марта 2020

Я очень неделя (на самом деле я почти ничего не знаю) о 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 & \\

Так, например, с 3-й по 6-ю строку вы можете видеть, что он начинается с \hline и заканчивается \\. Мне нужен текст между ними. Но я не знаю точное регулярное выражение, чтобы получить его. Я попробовал некоторые из них, найденные в Интернете, и отредактировал их, попробовал и потерпел неудачу с последних 2 дней.

Кто-нибудь здесь, чтобы помочь мне дать правильное регулярное выражение? Я работаю с PHP. Регулярное выражение должно возвращать 8 текстовых массивов из приведенного выше текста.

1 Ответ

1 голос
/ 22 марта 2020

Вы должны дважды избежать обратной косой черты:

$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
...