猿问

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

我有一个字符串


(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 result

var_dump($matches);


慕村9548890
浏览 132回答 3
3回答

回首忆惘然

使用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)

泛舟湖上清波郎朗

如果您的字符串始终有 4 个组,那么您可以使用与括号中的符号匹配的模式,后跟一些重复 4 次的文本:^(\(.\).+?)\s+(\(.\).+?)\s+(\(.\).+?)\s+(\(.\).+?)$但是,如果您的字符串具有可变数量的组,那么您无法将它们全部放在不同的匹配组中,您需要使用以下方式获取它们preg_match_all:(\(.\)[^(]+)演示在这里。

蓝山帝景

用正则表达式分割你的字符串是最简单的(?i) +(?=\([a-z]\))它匹配一个或多个空格,后跟一个左括号,后跟一个字母,后跟一个右括号,(?=\([a-z]\))是一个积极的前瞻。演示
随时随地看视频慕课网APP
我要回答