无论我多么认为我知道正则表达式,他们似乎总是打败我。
我正在寻找一种能匹配任何字符串的通用模式。我可以弄清楚如何处理所有这些不同的命名约定的唯一方法是制作一堆不同的正则表达式模式,现在我甚至不确定是否所有数据都被拾取,所以我必须手动交叉检查它
我只是想拿起可能在两个方括号内的任何东西[]:
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的正则表达式,在线帮助很少。
答案 0 :(得分:20)
$a = [regex]"\[(.*)\]"
$b = $a.Match("sdfqsfsf[fghfdghdfhg]dgsdfg")
$b.Captures[0].value
答案 1 :(得分:7)
匹配不是括号的所有内容。创建一个包含括号字符以外的任何字符的字符类:
$line -match "\[[^\[\]]+\]"
答案 2 :(得分:2)
专注于
"我只是想拿起任何可能在两个方括号内的东西[]"
我认为 \[.*\]
正是您所寻找的。
<强>解释强>
Sice [
和 ]
有特殊用途,因此您需要在这些字符之前使用\
。
.
(点)代表任何字符和
*
代表前一个修正符的任意重复次数
在此处,前一个字符为 .
,因此 .*
代表任何常规字符串。