PHP7.4正则表达式提取问题:处理含多空格的目标内容
解决PHP7.4正则提取需求的方案
针对你的场景,核心是要捕获冒号后单个空格开始的内容,直到遇到连续两个及以上空格或行尾为止,同时保留内容里的单个空格。可以用以下正则表达式解决:
$pattern = '%^Numer właściciela: (?<owner_id>.+?)(?=\s{2}|$)%imu';
正则说明:
^Numer właściciela:精准匹配每行开头的固定前缀文本匹配冒号后的单个空格(如果前缀后可能出现其他空白符,可替换为[[:space:]])(?<owner_id>.+?)命名捕获组owner_id,+?是非贪婪匹配,确保不会过度匹配到后面的无关内容(?=\s{2}|$)正向前瞻断言,当匹配到连续两个空格或者行尾时停止捕获,完美避开后面的地址内容- 修饰符
m开启多行模式,让^和$匹配每行的首尾;u支持Unicode字符(适配波兰语特殊字符);i可选,若前缀大小写不固定可保留,否则可移除
PHP代码示例:
$text = <<<TEXT Numer właściciela: NOWAKOWSKA 01-234 Warsaw Numer właściciela: NOWAK_S6_2 Numer właściciela: KOWALSKA_S6_ 01-234 Warsaw Numer właściciela: NOWACKI S6_ 01-234 Warsaw TEXT; preg_match_all($pattern, $text, $matches); $ownerIds = $matches['owner_id']; // 输出结果 foreach ($ownerIds as $id) { echo $id . "\n"; }
运行后会输出你需要的结果:
NOWAKOWSKA NOWAK_S6_2 KOWALSKA_S6_ NOWACKI S6_
内容的提问来源于stack exchange,提问作者mkrowiarz
相关产品推荐
相关产品推荐

