Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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
Regex 我怎么能在正则表达式中得到2个匹配项?_Regex_Powershell - Fatal编程技术网

Regex 我怎么能在正则表达式中得到2个匹配项?

Regex 我怎么能在正则表达式中得到2个匹配项?,regex,powershell,Regex,Powershell,我有如下格式的xml文件: <User> <FirstName>Foo Bar</FirstName> <CompanyName>Foo</CompanyName> <EmailAddress>bar@foo.com</EmailAddress> </User> <User> ... 我正在使用以下代码段: $directory = "\\PC001\Blah" Function G

我有如下格式的xml文件:

<User>
<FirstName>Foo Bar</FirstName>
<CompanyName>Foo</CompanyName>
<EmailAddress>bar@foo.com</EmailAddress>
</User>
<User>
...
我正在使用以下代码段:

$directory = "\\PC001\Blah"


Function GetFiles ($path) {
    foreach ($item in Get-ChildItem $path) {
        if ( Test-Path $item.FullName -PathType Container) {
            GetFiles ($item.FullName)
        } else {
            $item
        }
    }
}


Foreach ($file in GetFiles($directory)) {
    If ($file.extension -eq '.test') {
        $content = Get-Content $file.fullname
        $pattern = '(?si)<CompanyName>(.*?)</CompanyName>\n<EmailAddress>(.*?)</EmailAddress>'
        $matches = [regex]::matches($content, $pattern)

        foreach ($match in $matches) {
            $matches[0].Value -replace "<.*?>" 
        }    
    }
}
$directory=“\\PC001\Blah”
函数GetFiles($path){
foreach($Get ChildItem$path中的项){
if(测试路径$item.FullName-路径类型容器){
GetFiles($item.FullName)
}否则{
$item
}
}
}
Foreach($GetFiles($directory)中的文件){
如果($file.extension-eq'.test'){
$content=获取内容$file.fullname
$pattern='(?si)(.*)\n(.*)'
$matches=[regex]::匹配($content,$pattern)
foreach($match中的匹配项){
$matches[0]。值-替换“”
}    
}
}

但是,
$matches
为空,因此我的正则表达式有问题。如果我省略了
\n(.*?
,它会起作用。我做错了什么?

该文件中可能会出现
\r
字符。所以像下面这样改变你的正则表达式

$pattern = '(?si)<CompanyName>(.*?)</CompanyName>[\n\r]+<EmailAddress>(.*?)</EmailAddress>'
$pattern='(?si)(.*)[\n\r]+(.*)'

$pattern='(?si)(*?).*(*?)

该文件中可能会出现
\r
字符。所以像下面这样改变你的正则表达式

$pattern = '(?si)<CompanyName>(.*?)</CompanyName>[\n\r]+<EmailAddress>(.*?)</EmailAddress>'
$pattern='(?si)(.*)[\n\r]+(.*)'

$pattern='(?si)(*?).*(*?)

该文件中可能会出现
\r
字符。所以像下面这样改变你的正则表达式

$pattern = '(?si)<CompanyName>(.*?)</CompanyName>[\n\r]+<EmailAddress>(.*?)</EmailAddress>'
$pattern='(?si)(.*)[\n\r]+(.*)'

$pattern='(?si)(*?).*(*?)

该文件中可能会出现
\r
字符。所以像下面这样改变你的正则表达式

$pattern = '(?si)<CompanyName>(.*?)</CompanyName>[\n\r]+<EmailAddress>(.*?)</EmailAddress>'
$pattern='(?si)(.*)[\n\r]+(.*)'

$pattern='(?si)(*?).*(*?)
$pattern='(?si)(.*?)\s*(.*?)
尝试此操作。
\s
将确保覆盖所有空格和换行符。

$pattern='(?si)(*?)\s*(*?)
尝试此操作。
\s
将确保覆盖所有空格和换行符。

$pattern='(?si)(*?)\s*(*?)
尝试此操作。
\s
将确保覆盖所有空格和换行符。

$pattern='(?si)(*?)\s*(*?)
试试这个。
\s
会确保所有空格和换行符都被覆盖。

会一直相邻吗?您不使用的原因是什么?
是否总是相邻?您不使用的原因是什么?
是否总是相邻?您不使用的原因是什么?
是否总是相邻?你为什么不使用这个?