在这个例子中,我有一个包含许多已定义元素的大字符串 part of example string here。 在这个例子中,我从示例文件(从第一个(~32)波浪号开始到 ~120 3 )获得匹配,这在我的正则表达式中是正确的,但我需要更新正则表达式,使其从 ~120 3 反向获得第一个最接近的匹配,结果为:
PRIEDE EGLE BERZS LAPU KOKI
<?php
$regex = '/~[1-9](.*?)\~120 3/s';
preg_match($regex, $str, $matches);
echo '<pre>';
print_r($matches);
exit();
?>
所以问题是: 我应该如何设置方向以获得字符串的一部分&#34;反向&#34;?如果我匹配~120 3,那么我得到的所有结果从~120 3反向直到我匹配波形符号+数字 - 〜[1-9]?
我当前正则表达式结果的附加图像并标记了几个元素: *绿色 - 我知道并在我的想象中的元素 - 将开始反向搜索。 *灰色 - 正确的结果。 *红色 - 火焰匹配从 ~120 3
反向发现的内容提前感谢您的建议!
答案 0 :(得分:1)
所以问题是:
我应该如何设置方向以获得字符串的一部分&#34;反向&#34;?如果我匹配
~120 3
,那么我会反过来~120 3
的所有结果,直到我匹配波形符号+数字 -~[1-9]
?
无法在输入中更改Boost正则表达式匹配方向,但是,您可以使用前瞻来限制匹配的文本。
度Acc。根据要求,您需要
~[1-9]([^~]*(?:~(?![1-9])[^~]*)*)~120 3
请参阅regex demo。
<强>详情:
~[1-9]
- 您的初始分隔符([^~]*(?:~(?![1-9])[^~]*)*)
- 捕获第1组匹配:
[^~]*
- 除了波浪号之外的任何0 +字符(?:~(?![1-9])[^~]*)*
- 0+序列:
~(?![1-9])
- 未跟随1
到9
的数字的代字号[^~]*
- 除了波浪号之外的任何0 +字符~120 3
- 结束分隔符但是,它不会捕获您需要的内容,因为它会在开头包含一些数字和空格。也许你的起始分隔符应该是~[\d\s]+
,然后前瞻应该是(?![\d\s]+)
。请参阅another demo。