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

[问题求助] powershell 中用-match取所有匹配值

下面的代码可以执行, 但是取到的值只有一个, 求高手指点, 多谢

我想取  开头是2到4个字母, 后跟一个空格, 再跟一个:  然后跟任意字符的行

想取到
abc :ABC
abcd :BBB
aeee :中国
  1. $s = @'
  2. def :BBB
  3. abc :ABC
  4. abcd :BBB
  5. aeee :中国
  6. '@
  7. $s -match '(?m)(^[a-z]{2,4} :.+)'
  8. $matches
复制代码

再了解一下 -match 操作符的用法:
左侧是多个对象时
  1. $s -split '\n' -match '^[a-z]{2,4} :.+'
复制代码
  1. $arr= @(
  2. ' def :BBB'
  3. 'abc :ABC'
  4. 'abcd :BBB'
  5. 'aeee :中国'
  6. )
  7. $arr -match '^[a-z]{2,4} :.+'
复制代码
1

评分人数

微信:flashercs
QQ:49908356

TOP

回复 2# flashercs


  多谢大侠指导:

现在还是有点不明白:

为什么我的 -match结果返回的是真假, 你的却直接返回了满足条件的值

TOP

本帖最后由 flashercs 于 2022-7-18 17:40 编辑

回复 3# 小白龙


    https://docs.microsoft.com/en-us ... -notmatch-operators
powershell的很多操作符都支持左侧操作数是一个对象或多个对象;但返回结果不一样的.
微信:flashercs
QQ:49908356

TOP

回复 4# flashercs

再次感谢指点,

总感觉我最上面的代码, 改改哪里就能行的通

记得以前看到类似的教程, 说是()中的是组, 有几个匹配的, 就会返回几个组, 可我的就是不能返回

TOP

本帖最后由 flashercs 于 2022-7-18 18:31 编辑

回复 5# 小白龙


    你那是一个字符串,先-split '\n' 分成多行就行了.
  1. $s = @'
  2. def :BBB
  3. abc :ABC
  4. abcd :BBB
  5. aeee :中国
  6. '@
复制代码
这是一个字符串,先-split '\n' 再 -match
微信:flashercs
QQ:49908356

TOP

返回列表