为了账号安全,请及时绑定邮箱和手机立即绑定

php“preg_match”中字符串的组正则表达式模式匹配

php“preg_match”中字符串的组正则表达式模式匹配

PHP
慕村9548890 2022-10-14 10:24:01
我有一个字符串(A) fdkf djkf gsdfjkg hsfl (B) jfg dkfjg hdksfjg dkfj (c) ndfkj gndfg ndfn (d) kdjfskdj fs;s dknls期望的输出应该是这样的4 group matched(A) fdkf djkf gsdfjkg hsfl(B) jfg dkfjg hdksfjg dkfj(c) ndfkj gndfg ndfn(d) kdjfskdj fs;s dknls请帮忙我正在尝试/((.+?) (?=\())/正则表达式,但它没有创建 4 个组我在这里尝试创建这种模式 https://regex101.com/r/KxAcaV/1$re = '/((.+?) (?=\())/';$str = '(A) fdkf djkf gsdfjkg hsfl (B) jfg dkfjg hdksfjg dkfj (c) ndfkj gndfg ndfn  (d) kdjfskdj fs;s dknls';preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);// Print the entire match resultvar_dump($matches);
查看完整描述

3 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

使用preg_match_all


$str = '(A) fdkf djkf gsdfjkg hsfl (B) jfg dkfjg hdksfjg dkfj (c) ndfkj gndfg ndfn (d) kdjfskdj fs;s dknls';


preg_match_all('/\(.+?\).+?(?= \(|$)/', $str, $m);

print_r($m[0]);

输出:


Array

(

    [0] => (A) fdkf djkf gsdfjkg hsfl

    [1] => (B) jfg dkfjg hdksfjg dkfj

    [2] => (c) ndfkj gndfg ndfn

    [3] => (d) kdjfskdj fs;s dknls

)


查看完整回答
反对 回复 2022-10-14
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

如果您的字符串始终有 4 个组,那么您可以使用与括号中的符号匹配的模式,后跟一些重复 4 次的文本:

^(\(.\).+?)\s+(\(.\).+?)\s+(\(.\).+?)\s+(\(.\).+?)$

但是,如果您的字符串具有可变数量的组,那么您无法将它们全部放在不同的匹配组中,您需要使用以下方式获取它们preg_match_all

(\(.\)[^(]+)

演示在这里


查看完整回答
反对 回复 2022-10-14
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

用正则表达式分割你的字符串是最简单的

(?i) +(?=\([a-z]\))

它匹配一个或多个空格,后跟一个左括号,后跟一个字母,后跟一个右括号,(?=\([a-z]\))是一个积极的前瞻

演示


查看完整回答
反对 回复 2022-10-14
  • 3 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信