gpt4 book ai didi

php - RegEx(PHP 中的 preg_match_all)捕获一系列 到第一个字母数字字符

转载 作者:行者123 更新时间:2023-12-04 03:33:59 28 4
gpt4 key购买 nike

这里的问题是问题描述中numbers和alphanumeric的冲突。

给定文本:

<0><1><2><3><4><5><6><7><8><9><10><11><12><13><14><15><16><17><18>Thenext 11 keys can change the SWING from OFF (50%) to<19><20><21><22><23><24><25>80<26><27><28><29><30><31><32>% duringarpeggiator or sequencer operation.<33><34>

我需要提取以下四组:

<0><1><2><3><4><5><6><7><8><9><10><11><12><13><14><15><16><17><18>
<19><20><21><22><23><24><25>
<26><27><28><29><30><31><32>
<33><34>

原因:我们希望以更加用户友好的方式显示它,因为...

[1]The next 11 keys can change the SWING from OFF (50%) to [2]80[3]%during arpeggiator or sequencer operation.[4]

当前代码:

$pattern = '<[\d<>' . REGSTART . REGEND . REGSTARTSQ . REGENDSQ . '\{\}]+>';
$numberofsupertags = preg_match_all('/(' . $pattern . ')/', $source, $superchunks);
echo '<pre>';
print_r($superchunks);
echo '</pre><br>';

(REGSTART/REGEND/REGSTARTSQ/REGENDSQ指的是其他可能的符号对,如【】或〖〗等)

给出三组:

<0><1><2><3><4><5><6><7><8><9><10><11><12><13><14><15><16><17><18>
<19><20><21><22><23><24><25>80<26><27><28><29><30><31><32>
<33><34>

如您所见,RegEx 无法考虑 标签之间的唯一数字序列。

我已经尝试了很多东西:

$pattern = '([<|' . REGSTART . REGSTARTSQ . '|\{]\d+?[>|' . REGEND . REGENDSQ . | \}])+';
$pattern = '<[\d<>' . REGSTART . REGEND . REGSTARTSQ . REGENDSQ . '\{\}]+[>(?=\d)|>]';

...但无济于事。

什么是正确的解决方案,哪里出错了?这看起来非常简单,但显然并非如此。

最佳答案

你可以使用

(?:<(?:{\d+}|【\d+】|〖\d+〗|\d+)>)+

参见 regex demo . 详细信息:

  • (?: - 非捕获组的开始:
    • < - < 字符
    • (?:{\d+}|【\d+】|〖\d+〗|\d+) - 备选方案之一:{ + 一个或多个数字+ , + 一位或多位数字 + , + 一位或多位数字 + 或一位或多位数字
    • - 字符
  • )+ - 一次或多次。

参见 PHP demo :

$source = '<0><1><2><3><4><5><6><7><8><9><10><11><12><13><14><15><16><17><18>The next 11 keys can change the SWING from OFF (50%) to <19><20><21><22><23><24><25>80<26><27><28><29><30><31><32>% during arpeggiator or sequencer operation.<33><34>';

$cnt = 0;
echo preg_replace_callback('~(?:<(?:{\d+}|【\d+】|〖\d+〗|\d+)>)+~u', function($m) use (&$cnt) {
return '['. ++$cnt .']';
}, $source);
// => [1]The next 11 keys can change the SWING from OFF (50%) to [2]80[3]% during arpeggiator or sequencer operation.[4]

关于php - RegEx(PHP 中的 preg_match_all)捕获一系列 <tags containing numbers> 到第一个字母数字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67304573/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com