找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 4158|回复: 5

[文本处理] 有没有支持正则平衡组查找替换的几百k内的小工具?

[复制链接]
发表于 2025-6-27 15:29:13 | 显示全部楼层 |阅读模式
有没有支持正则平衡组查找替换的几百k内的小工具? 好像在哪里看到过, 有个老版的国人开发的查替小工具
发表于 2025-6-28 12:13:38 | 显示全部楼层
  1. using System;
  2. using System.Text.RegularExpressions;

  3. public class Example
  4. {
  5.     public static void Main(string[] args)
  6.     {
  7.         Console.Write(Regex.Replace(Console.In.ReadToEnd(), args[0], args[1]));
  8.     }
  9. }
复制代码
介意用c#吗参考帮助里的例子试了一下,exe文件几k
echo test123|a.exe "\d+" "456"
 楼主| 发表于 2025-6-28 17:44:46 | 显示全部楼层
回复 2# idwma


    谢谢,
请问如何编译并使用?
发表于 2025-6-30 19:51:17 | 显示全部楼层
没啥特别需求直接正则递归匹配就行
例如pcre匹配括号的正则(注意匹配时的位置)
\(((?>[^()]+)|(?0))*\)
(?0)表示正则自身 ,即\(((?>[^()]+)|(?0))*\) ,因为里面又包含了(?0) ,即还有一个自身 ,自身里面又有一个自身 ,会一直套娃下去直到终止 ,除了不能起名名和断言 ,功能跟平衡组都一样
 楼主| 发表于 2025-6-30 23:26:37 | 显示全部楼层
本帖最后由 小白龙 于 2025-6-30 23:37 编辑

回复 4# Five66


大佬请教个问题, 用你说的递归正则怎样取函数体的红色文本, 用下面正则不能生效
Index\s*\([^)]*\)\s*\{((?:[^{}]++|(?R))*)\}

public Index(int value, bool fromEnd = false)
{
        if (value < 0)
        {
                throw new ArgumentOutOfRangeException(nameof(value), "{value must be non-negative");
        }

        if (fromEnd)
                _value = ~value;
        else
                _value = value;

}
发表于 2025-7-1 00:48:24 | 显示全部楼层
回复 5# 小白龙


    只能这样(注意匹配时的位置)
Index\s*\([^)]*\)\s*(\{((?:[^{}]+)|(?1))*\})
或者这样(?R是php的吧? ,注意匹配时的位置)
{((?>[^{}]+)|(?R))*}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:05 , Processed in 0.018064 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表