[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] chatgpt写的PowerShell正则平衡组示例改错

刚刚让chatgpt写几个平衡组示例, 但是执行结果都是错的, 求路过大佬改正
也第一次看到正则表达式可以多行表示, 而且行尾还能加注释, C#不能这样玩吧
  1. $pattern = @"
  2. \(
  3.     (?>                     # 开始一个平衡组
  4.         [^()]+              # 匹配除了括号以外的任意字符
  5.         |                   # 或者
  6.         (?<paren>\()        # 匹配左圆括号并将其压入名为paren的平衡组中
  7.         |                   # 或者
  8.         (?<-paren>\))       # 匹配右圆括号并将其弹出名为paren的平衡组中
  9.     )*                      # 重复上述步骤多次
  10.     (?(paren)(?!))          # 如果paren平衡组不为空,则匹配失败
  11. \)
  12. "@
  13. $text = "This is (a (test) string) with (nested (parentheses))."
  14. $matches = [regex]::Matches($text, $pattern)
  15. foreach ($match in $matches) {
  16.     Write-Host $match.Value
  17. }
复制代码

直接告诉chatgpt结果错了他会帮你改过来的呀,现在ai进化速度很快现在错了过一会可能就对了

TOP

回复 2# idwma


    我让他改了N次, 都改不对

TOP

这个例子看着没问题呀,什么样的结果才是对的?

TOP

本帖最后由 小白龙 于 2023-4-11 19:32 编辑

回复 4# idwma

输出结果为空, 什么都没有输出, 应该输出所有括号

TOP

本帖最后由 idwma 于 2023-4-11 19:59 编辑

回复 5# 小白龙


    确实是有结果的,是不是你的powershell版本不是最新的
(a (test) string)
(nested (parentheses))

TOP

回复 6# idwma


   我用的是win7  ps5.1

TOP

回复 7# 小白龙


    5.1不是最新的,告诉chatgpt用ps5.1来举例试试

TOP

俺只知道目前地球上只有人类大脑和其它生物的才是智能。其它都是复读机,炒作=>股票

gpt 是错的
  1. $pattern = @"
  2. (?x)\(
  3.     (                   # 开始一个平衡组
  4. (?>[^()]*)      # 匹配除了括号以外的任意字符 固化不回溯,其实多余 因[^()]*本身最多回溯一个字符,
  5.         |               # 分支
  6.         (?<o>\()        # 匹配左圆括号并将其压入名为o的栈
  7.         |               # 分支
  8.         (?<-o>\))       # 匹配右圆括号并将其弹出名为o的栈
  9.     )*                  # 重复上述步骤多次
  10.     (?(o)(?!))          # 如果o平衡组不为空,则匹配失败
  11. \)
  12. "@
  13. [regex]::Matches($text, $pattern).Value
复制代码
  1. [regex]::Matches($text, "(?x)\( ( [^()]* | (?<o>\() | (?<-o>\)) )*(?(o)(?!)) \)").Value
复制代码
2

评分人数

QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

再次声明: ? 不参与匹配, + * 均匹配从匹配点起的后面的全部(不是网上说的匹配0个1个多个)然后回溯,结果写入 GROUPS[0]中。
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

回复 8# idwma


    哎, 问了七八轮了, 还没有答对, 太垃圾了

TOP

回复 10# xczxczxcz


    大佬, 牛X啊, 对正则理解太深刻了, 有什么精华的正则教程链接给推荐一下吗

TOP

毕竟是人工智能嘛,还是离不开人,按x大的加上忽略转义空白(?x)其实也是有结果的

TOP

回复 13# idwma

什么意思, x大的那两个正则都可以直接出结果的, 在ps5.1

TOP

回复 14# 小白龙

你看像这样,gpt给的没忽略非转义空白,加上(?x)就好了
  1. $pattern = @"
  2. (?x)\(
  3.     (?>                     # 开始一个平衡组
  4.         [^()]+              # 匹配除了括号以外的任意字符
  5.         |                   # 或者
  6.         (?<paren>\()        # 匹配左圆括号并将其压入名为paren的平衡组中
  7.         |                   # 或者
  8.         (?<-paren>\))       # 匹配右圆括号并将其弹出名为paren的平衡组中
  9.     )*                      # 重复上述步骤多次
  10.     (?(paren)(?!))          # 如果paren平衡组不为空,则匹配失败
  11. \)
  12. "@
复制代码

TOP

返回列表