【问题标题】:Find 2 to 4 words with maximum of 2 commas anywhere between them找到 2 到 4 个单词,它们之间最多有 2 个逗号
【发布时间】:2019-09-15 18:22:11
【问题描述】:

用php的preg_match()..

找到 2 到 4 个单词,它们之间最多使用 2 个逗号。

$string = "word1,,, word2,,, word3,,, word4, word5, word6,,, word7";

输出应该是:word4, word5, word6

如果我将字符串更改为..

$string = "word1,,,word2,,,word3,,,word4 word5 word6,,word7 word8";

输出应该是:word4 word5 word6,,word7

因为找到了 4 个单词,它们之间只有 2 个逗号。

如果我修改正则表达式并将“4”更改为“5”..
那么输出应该是:word4 word5 word6,,word7 word8

因为找到了 5 个单词,它们之间只有 2 个逗号。

【问题讨论】:

  • 显示您尝试过的内容,我个人不会使用正则表达式,只是分解字符串并进行一些计数等。
  • 我会使用类似(?>\b,{0,2} *\w+){2,4}

标签: php regex preg-match


【解决方案1】:

也许,用一些类似的表达,

(?:(?<=^|,)[^,\r\n]+,){2,}|(?:(?<=^|,)[^,\r\n]+,{2}){1,}[^,]+

你可以开始了。

$re = '/(?:(?<=^|,)[^,\r\n]+,){2,}|(?:(?<=^|,)[^,\r\n]+,{2}){1,}[^,]+/';
$str = 'word1,,, word2,,, word3,,, word4, word5, word6,,, word7
word1,,,word2,,,word3,,,word4 word5 word6,,word7 word8';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

foreach ($matches as $key => $value) {
    $output = trim($value[0], ",");
    print(trim($output) . "\n");
}

输出

word4, word5, word6
word4 word5 word6,,word7 word8

如果您希望简化/修改/探索表达式,请在regex101.com 的右上角面板中进行说明。如果您愿意,您还可以在this link 中观看它如何与一些示例输入相匹配。


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多