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



我对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开始,以\结束。我需要这中间的文字。但我不知道确切的正则表达式。我尝试了一些在网上找到的并编辑了这些,从过去两天开始尝试,但都失败了。

有人能帮我给出正确的正则表达式吗?我正在使用PHP。正则表达式应该从上面给定的文本中返回8个文本数组。

您必须对反斜杠进行双转义:

$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)(?:(?!\\\\)[sS])+(?=\\\\)/', $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
[sS]              # any character, including linebreaks
)+                      # end group, may appear 1 or more times
(?=\\\\)            # positive lookahead, make sure we have 2  backslashes after

最新更新