Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 当单词匹配时,检索它后面的可变字符串_Powershell_Loops_Foreach_Split_Match - Fatal编程技术网

Powershell 当单词匹配时,检索它后面的可变字符串

Powershell 当单词匹配时,检索它后面的可变字符串,powershell,loops,foreach,split,match,Powershell,Loops,Foreach,Split,Match,我有一个查询,如下所示: 来自表a 内连接表B 表A.xx=表B.xx 内联接表 表a.yy=表c.yy 我正在尝试编写一个脚本来选择单词“JOIN”后面的表 我现在写的脚本是: $data=获取内容-路径query1.txt $dataconv=“$data.ToLower()-替换“\s+”,“” $join=0 $overigetabellen=($dataconv)| foreach{ 如果($\匹配“join(.*)”){ $join++ $join=$matches[1]。拆分(“

我有一个查询,如下所示:

来自表a
内连接表B
表A.xx=表B.xx
内联接表
表a.yy=表c.yy
我正在尝试编写一个脚本来选择单词“JOIN”后面的表

我现在写的脚本是:

$data=获取内容-路径query1.txt
$dataconv=“$data.ToLower()-替换“\s+”,“”
$join=0
$overigetabellen=($dataconv)| foreach{
如果($\匹配“join(.*)”){
$join++
$join=$matches[1]。拆分(“”[0]
#写入已联接的“主机”表:“$join”
$join
}
}
$overigetabellen
这只给了我第一张桌子,所以是桌子B。
谁能帮我把第二张表也作为输出

这是我寻找所需表名的天真尝试

将在空白处输入的数据拆分为一个数组,找到单词“JOIN”的索引,然后访问单词“JOIN”后面的以下索引

产出:

表B

表C

如果需要不同的输入文件,您可以根据需要调整大小写(将输入设置为所有小写字母)等。

使用以下方法处理数据:


$data |选择String-AllMatches-Pattern'(?是否正在查找
(获取内容-路径query1.txt |其中对象{$|-match'JOIN'})-替换“^.*JOIN\s(.*))$',“$1”
?非常感谢!这确实适用于表名为TableA的情况。如果联接后的单词是table.A,则它将不起作用。@Nab显然,如果表名可能也包含非单词字符,则需要调整模式。请参阅更新的答案。
$data = Get-Content -Path query1.txt
$indices = @()
$output = @()

$dataarray = $data -split '\s+'
$singleIndex = -1
Do{
    $singleIndex = [array]::IndexOf($dataarray,"JOIN",$singleIndex + 1)
    If($singleIndex -ge 0){$indices += $singleIndex}
}While($singleIndex -ge 0)

foreach ($index in $indices) {
$output += $dataarray[$index + 1]
}
$data | Select-String -AllMatches -Pattern '(?<=join\s+)\S+' |
    Select-Object -Expand Matches |
    Select-Object -Expand Groups |
    Select-Object -Expand Value