【发布时间】:2013-08-02 18:31:09
【问题描述】:
无论我觉得我知道正则表达式有多好,它们似乎总是打败我。
我正在寻找可以匹配任何字符串的通用模式。我能弄清楚如何处理所有这些不同的命名约定的唯一方法是制作一堆不同的正则表达式模式,现在我什至不确定是否所有数据都被拾取,所以我必须手动交叉检查它。
我只是想找出可能在两个括号 [] 内的任何内容:
elseif($line -match "\[\w*\d*\]") {
$pars = $matches[0]
}
elseif($line -match "\[\d*\w*\]") {
$pars = $matches[0]
}
elseif($line -match "\[\w*\d*_\w*\]") {
$pars = $matches[0]
}
elseif($line -match "\[\w*\d*_*\w*-*\w*:*\w*\]") {
$pars = $matches[0]
}
elseif($line -match "\[\w*_*\w*_*\w*_*\w*_*\w*_*\w*-*\w*\]") {
$pars = $matches[0]
}
我这样做的方式不会产生错误,但我不确定它是否能处理我可能遇到的所有情况。对于这么多数据,手动检查几乎是不可能的。
此外,如果有人知道生成正则表达式模式的强大实用程序,将不胜感激。我只能找到对我来说不是很有用的正则表达式测试器,并且对于使用 powershell 的正则表达式在线帮助很少。
【问题讨论】:
-
任何字符串是什么意思?这是否意味着正则表达式
.+会做?顺便说一句,\d和_已经包含在\w中 -
您并没有很好地描述您要在括号内匹配的内容。从我可以从你的代码中推断出来,你正在寻找任何只有字母数字字符和下划线的字符串。如果是这种情况,您可以使用
\[[\d\w]*\]或\[[a-zA-Z_0-9]*\]....哦,我也看到了冒号和破折号。好吧,在这种情况下你可以做\[[\w\d:-]*\]。 -
Angga 明白了。任何字符串我的意思是“你可以放在两个括号之间的任何可能的字符”。
.+正好处理这个问题。谢谢,发布您的解决方案,以便我可以接受它作为答案 -
@Cole9350 最好用这些信息更新问题。
-
@PeterMortensen 请不要使用您的自动化软件来编辑我的问题/答案。编辑没有用,也没有意义。维基百科不是您建议的更改的有效站点来源。
标签: regex parsing powershell match