О выражении регулярного выражения - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь получить между $[ текстом.Я пытаюсь решить эту проблему с помощью регулярного выражения, приведенного ниже:

$pattern = "(?=\$\[)(.*?)(?=\$\[)"

Но это только до головы новой строки.Например, он не получает

"в Fonet.Common.DicomNet.DicomAttributeCollection.Load (DicomDataSet ds)"

Как я могу решить эту проблему?

$ [WARN] 01.02.2019 09:14:14 ScheduledProcedureSequence Не найдено $ [ERROR] 01.02.2019 11:09:02 Ссылка на объект не установлена ​​для экземпляра объекта.System.NullReferenceException Ссылка на объект не установлена ​​для экземпляра объекта.Void Load (Leadtools.Dicom.DicomDataSet) System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.в Fonet.Common.DicomNet.DicomAttributeCollection.Load (DicomDataSet ds)
в Fonet.Common.DicomNet.DicomAttributeCollection.Load (DicomDataSet ds) $ [ОШИБКА] 01.02.2019 11:09:02 рабочий списокк экземпляру объекта.System.NullReferenceException Ссылка на объект не установлена ​​для экземпляра объекта.Void Load (Leadtools.Dicom.DicomDataSet) System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.at Fonet.Common.DicomNet.DicomAttributeCollection.Load (DicomDataSet ds)

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Я только что попробовал это, но это не может работать, как я хотел.Я нашел другой способ.

    $allErrors = New-Object System.Collections.ArrayList
    $str = "";
    foreach($log in $logs)
    {

        if($log -match "(?=\$\[)")
        {
            $allErrors.Add($object);
            $str = ""
            $str = $log        
            $object = New-Object psobject
            $object | Add-Member -MemberType NoteProperty -Name AlarmText -Value $str
            Write-Host $str -ForegroundColor Yellow
        }
        else
        {
            $str += $log
            $object.AlarmText = $str;
            Write-Host $str -ForegroundColor Red
        }
    }

Я создаю новый объект, когда обнаружил новую ошибку.И затем я вставляю строки в мой объект, пока не обнаружу новую ошибку.Моя проблема решена таким образом.Спасибо за помощь.

0 голосов
/ 03 февраля 2019

Оператор точки (.) в регулярном выражении обычно соответствует любому одному символу, кроме переносов строк.Чтобы соответствовать им, вам нужно добавить флаг s, чтобы сопоставитель обрабатывал ввод как одну строку.

Это проще всего сделать с помощью (?s).Это установит флаг для всего шаблона, поэтому будьте осторожны, если вы встраиваете его в более крупный шаблон.

$pattern = "(?s)(?=\$\[)(.*?)(?=\$\[)"

Кроме того, побочный эффект от использования упреждений ((?= )) с обеих сторони при использовании ленивого повтора с нулем или более (*?) он всегда будет соответствовать нулю символов.Вам может понадобиться изменить любой из этих параметров:

  • Использовать упущение: (?s)(?<=\$\[)(.*?)(?=\$\[).
  • Совпадение хотя бы с одним символом: (?s)(?=\$\[)(.+?)(?=\$\[).
  • Измените первый прогноз на нормальный шаблон.(?s)(\$\[.*?)(?=\$\[)

Дополнительная информация:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...