[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 WHY 于 2023-4-10 00:01 编辑
  1. $s = @'
  2. zzz
  3. xxx
  4. abc bbb
  5. {
  6. [123]
  7. ccc
  8. {
  9. ddd
  10. }
  11. }
  12. '@
  13. #$num = '[' + (Get-Random -ma 999 -mi 100) + ']';
  14. $num = '[123]';
  15. $s -replace ('^(?>[^{]*){(\r?\n[ \t]+)(?!\' + $num + ')'), ('$&' + $num + '$1');
  16. pause
复制代码

TOP

回复 4# meixi


    已改

TOP

回复 10# meixi


    ChatGPT瞎说,我来解释一下吧
$s -replace '^(?>[^{]*){(\r?\n[ \t]+)(?!\[123])', '$&[123]$1';

(?>[^{]*) 是固化分组(原子组),作用是禁止回溯,当匹配不成功时可以提高效率。有些流派支持,有些不支持。

'^(?>[^{]*)    #开头不是{字符,这样的字符重复0次或多次。
{              #接着是{字符
(\r?\n[ \t]+)  #接着是一个回车换行,多个空格或Tab字符,把这些字符存放到子匹配Groups[1]中(即$1中)
(?!\[123])     #后面不是[123],这个是零宽断言。
'

每种流派的正则并不完全相同,不可能做到通用。试试
$s -replace '^[^{]*{(\r?\n[ \t]+)(?!\[123])', '$0[123]$1';

TOP

回复 13# meixi


1.我已经告诉你了,固化分组
http://www.bathome.net/post.php? ... p;extra=&page=1
2.我已经给了你一个不用固化分组的、看起来"通用"的脚本,何不试试呢
3.我感觉你使用的"程序"与PowerShell不搭边,为啥一定要在PowerShell里写正则呢
4.(?!\[123]) 左括号已经转义,孤零零的右括号不会引起歧义,无需转义。

TOP

回复 16# meixi


    网上随便找篇文章,就知道什么是"固化分组"
https://blog.csdn.net/liaowenxiong/article/details/118459839

TOP

回复 19# meixi


    别的方法就是:
1.扔掉你那个辣鸡软件,用PowerShell就行;
2.不要用正则,用 For 循环 + If 判断

TOP

  1. $s = @'
  2. zzz
  3. xxx
  4. abc bbb
  5. {
  6. [123]
  7. {
  8. ddd
  9. }
  10. }
  11. '@
  12. #$num = '[' + (Get-Random -ma 999 -mi 100) + ']';
  13. $num = '[123]';
  14. $arr = $s -split "`r`n";
  15. $s1 = '';
  16. for ($i=0; $i -lt $arr.Count; $i++){
  17.     If ($s1.IndexOf( '{') -ge 0){                 #上一行含"{"字符
  18.         If ($arr[$i].IndexOf($num) -lt 0){        #当前行不含[123]
  19.             $x = $arr[$i].TrimStart();            #删掉开头的空格或跳格
  20.             $y = $arr[$i].Replace($x, '') + $num; #增加一行
  21.             $arr[$i] = $y + "`r`n" + $arr[$i];    #重新赋值
  22.         }
  23.         break;
  24.     }
  25.     $s1 = $arr[$i];
  26. }
  27. $arr
复制代码

TOP

回复 22# meixi


    有些软件就是这样的,这也想支持一下、那也想支持一下,万金油似的,有人认为挺好。
我倒是觉得,杂而不精,无异于什么都不支持,说它辣鸡并不为过。

不用找了,根本没有什么通用的正则!
如果有人告诉你:有!
这个人要么不懂正则,要么就是个江湖骗子。

TOP

返回列表