[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 flashercs 于 2024-10-6 19:16 编辑
  1. $s = @'
  2. using System;
  3. public static void _Main0() {
  4. /*
  5. *multiline comment
  6. */
  7. string s = """
  8. _Main0
  9. {hello {world {
  10. }
  11. """;//singleline comment
  12. Console.WriteLine(s);
  13.     if(a=b){echo 111;/*comment
  14.     */}
  15.     //comment
  16. }
  17. public void _func0(string s1)
  18. {
  19. string s = """
  20. _func0
  21. }hello }world }
  22. """;
  23. Console.WriteLine(s + s1);
  24. }
  25. public void _func2() {
  26. string s = """
  27. _func2
  28. }hello }world
  29. """;
  30. Console.WriteLine(s);
  31. }
  32. public static string _Main2(int i)
  33. {
  34. string s = """
  35. _Main2
  36. {hello {world }
  37. {
  38. """;
  39. return s;
  40. }
  41. '@
  42. <#
  43. $re=[regex]'(?s)\b_Main(?>\w*)(?>\s*)\((?>[^)]*)\)(?>[^{]*)(?<o>\{)(?>/\*.*?\*/|//[^\n]*|"(?>""|\\"|[^"])*"|(?<o>\{)|(?<c-o>\})|.)+?(?(o)!)'
  44. $ms=$re.Matches($s)
  45. foreach($m in $ms){
  46. $gpc=$m.Groups['c']
  47. $gpc.Captures[$gpc.Count-1].Value
  48. '---------------'|Write-Host -ForegroundColor Green
  49. }
  50. #>
  51. $re=[regex]'(?s)\b_Main(?>\w*)(?>\s*)\((?>[^)]*)\)(?>[^{]*)(?<o>\{)(?<body>(?>/\*.*?\*/|//[^\n]*|"(?>""|\\"|[^"])*"|(?<o>\{)|(?<-o>\})|.)*?)(?<-o>\})(?(o)!)'
  52. $ms=$re.Matches($s)
  53. foreach($m in $ms){
  54. '---------------'|Write-Host -ForegroundColor Green
  55. $m.Groups['body'].Value
  56. '---------------'|Write-Host -ForegroundColor Green
  57. }
  58. <# 上面要处理的文本是一些函数定义, 我想用正则表达式来获取函数名中包含Main的函数体内的文本, 即最终执行的结果如下:
  59. string s = """
  60. _Main0
  61. {hello {world {
  62. }
  63. """;
  64. Console.WriteLine(s);
  65. string s = """
  66. _Main2
  67. {hello {world }
  68. {
  69. """;
  70. return s;
  71. #>
复制代码
微信:flashercs
QQ:49908356

TOP

回复 3# flashercs


    大佬能支招一下吗? 应该就是用平衡组正则获取到整个函数, 然后把函数体的文本定义到一个()组中, 然后取这个组的值, 多谢

TOP

本帖最后由 小白龙 于 2024-10-6 17:47 编辑

回复 3# flashercs
获取下面的红色字部分, 这些都是函数名中包含文本Main的函数的函数体, 也就是花括号内的文本

using System;

public static void _Main0() {
        string s = """
_Main0
{hello {world {
}
""";
        Console.WriteLine(s);

}

public void _func0(string s1)
{
        string s = """
_func0
}hello }world }
""";
        Console.WriteLine(s + s1);
}

public void _func2() {
        string s = """
_func2
}hello }world
""";
        Console.WriteLine(s);
}

public static string _Main2(int i)
{
        string s = """
_Main2
{hello {world }
{
""";
        return s;

}

TOP

获取的没错,不知道目的是获取哪些?
微信:flashercs
QQ:49908356

TOP

我试了几乎所有的ai, 在这个问题面前都躺平了

TOP

返回列表