我对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