正在努力解决这一问题,因为我对正则表达式不太满意。我有这样的字符串:
Method
Lorem ipsum dolor sit amet, id pro lorem consulatu, ut nemore principes vel. Nibh aliquam iracundia ea est, probo utamur placerat at duo. Nam an perfecto voluptaria temporibus, no dicat dolores eum. Doming dissentias eloquentiam sit id, sit eu etiam scriptorem appellantur, ne explicari voluptaria nec.
Agam erroribus cum id, vis ei nominavi copiosae. Per unum atomorum ut, amet atqui moderatius in mel, ex mucius concludaturque vix. Ei quodsi admodum conclusionemque duo, pro vidit nonumy fastidii at. Aliquip voluptua appetere eam id.
42
Aliquip voluptua appetere
我可以使用以下正则表达式检测到以下问题:/^Method\n(.*[\s\S]*)(?:\d\d)/
https://regex101.com/r/Uw3XzK/1
问题有时是由于我检测到的字符串未以数字结尾。在这里,我通常只需要转到字符串的末尾。
Method
Lorem ipsum dolor sit amet, id pro lorem consulatu, ut nemore principes vel. Nibh aliquam iracundia ea est, probo utamur placerat at duo. Nam an perfecto voluptaria temporibus, no dicat dolores eum. Doming dissentias eloquentiam sit id, sit eu etiam scriptorem appellantur, ne explicari voluptaria nec.
Agam erroribus cum id, vis ei nominavi copiosae. Per unum atomorum ut, amet atqui moderatius in mel, ex mucius concludaturque vix. Ei quodsi admodum conclusionemque duo, pro vidit nonumy fastidii at. Aliquip voluptua appetere eam id.
我尝试在搅拌器中添加?
。 /^Method\n(.[\s\S])(?:\d\d)?
,但是这会破坏第一个字符串的匹配。
我该如何首先匹配字符串1,然后又回退到文件末尾?
答案 0 :(得分:1)
在全点模式下使用preg_match_all
时,以下模式实际上适用于PHP:
\bMethod.*?(?=\d{2}|$)
示例脚本:
$input = "Method\nLorem ipsum dolor sit amet, id pro lorem consulatu, ut nemore principes vel. Nibh aliquam iracundia ea est, probo utamur placerat at duo. Nam an perfecto voluptaria temporibus, no dicat dolores eum. Doming dissentias eloquentiam sit id, sit eu etiam scriptorem appellantur, ne explicari voluptaria nec.\nAgam erroribus cum id, vis ei nominavi copiosae. Per unum atomorum ut, amet atqui moderatius in mel, ex mucius concludaturque vix. Ei quodsi admodum conclusionemque duo, pro vidit nonumy fastidii at. Aliquip voluptua appetere eam id.\n42\nAliquip voluptua appetere";
preg_match_all("/\bMethod.*?(?=\d{2}|$)/s", $input, $matches);
print_r($matches);