Board logo

标题: [问题求助] powershell 中用-match取所有匹配值 [打印本页]

作者: 小白龙    时间: 2022-7-18 16:28     标题: 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
复制代码

作者: flashercs    时间: 2022-7-18 16:51

再了解一下 -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} :.+'
复制代码

作者: 小白龙    时间: 2022-7-18 17:15

回复 2# flashercs


  多谢大侠指导:

现在还是有点不明白:

为什么我的 -match结果返回的是真假, 你的却直接返回了满足条件的值
作者: flashercs    时间: 2022-7-18 17:36

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

回复 3# 小白龙


    https://docs.microsoft.com/en-us ... -notmatch-operators
powershell的很多操作符都支持左侧操作数是一个对象或多个对象;但返回结果不一样的.
作者: 小白龙    时间: 2022-7-18 18:09

回复 4# flashercs

再次感谢指点,

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

记得以前看到类似的教程, 说是()中的是组, 有几个匹配的, 就会返回几个组, 可我的就是不能返回
作者: flashercs    时间: 2022-7-18 18:22

本帖最后由 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




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2