gpt4 book ai didi

php - 删除除大括号内的数字和一些字符之外的所有内容

转载 作者:行者123 更新时间:2023-12-05 00:42:30 27 4
gpt4 key购买 nike

想要删除除#NewLine、完整的括号集和大括号内的数字之外的所有内容。
示例输入:

# (1296) {20} [529] [1496] [411]
# (MONDAY ) (1296)
# (646) {20} (BEACH 7) [20 Mtrs] { 03 Foot }
# {19} [455] [721] (1296) (SUNDAY ) [2741] (MONDAY (WEDNESDAY {20}
# {19} (1296)

不起作用的代码:

$re = '/(?:\[[^][]*]|\([^()]*\)|{[^{}]*})(*SKIP)(*F)|[^][(){}@#]+/m';
$result = preg_replace($re, '', $input);

输出不正确:

#(1296){20}[529][1496][411]
#(1296)
#(646){20}(BEACH 7)[20 Mtrs]{ 03 Foot }
#{19}[455][721](1296)[2741](({20}
#{19}(1296)

期望的输出:

#(1296) {20} [529] [1496] [411]
#(1296)
#(646) {20}
#{19} [455] [721] (1296) [2741] {20}
#{19} (1296)

最佳答案

您可以在括号之间匹配至少 1 个数字,然后跳过该匹配项。

然后匹配除换行符或 # 以外的任何字符以替换为空字符串。

(?:\[\h*\d[\h\d]*]|\(\h*\d[\h\d]*\)|{\h*\d[\h\d]*})\h*(*SKIP)(*F)|[^#\n]

说明

  • (?: 非捕获组
    • \[\h*\d[\h\d]*] 匹配方括号之间的至少 1 个数字,其中 \h 匹配水平空白字符(没有换行符)
    • |
    • \(\h*\d[\h\d]*\)括号之间1位
    • |
    • {\h*\d[\h\d]*}大括号之间的1位数字
  • )\h*关闭非捕获组,匹配1+个空格
  • (*SKIP)(*F) 跳过匹配失败(使其在输出中保持不变)
  • |
  • [^#\n] 匹配除 # 或换行符以外的任何字符

Regex demo

关于php - 删除除大括号内的数字和一些字符之外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73296237/

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