Многострочное регулярное выражение для соответствия блоку конфигурации

Вы можете использовать Expression.AndAlso / OrElse для объединения логических выражений, но вы должны убедиться, что значения параметра одинаковы.

У меня были проблемы с EF и PredicateBuilder , поэтому я сделал свой собственный, не прибегая к Invoke, чтобы я мог использовать вот так:

var filterC = filterA.And(filterb);

Исходный код для моего PredicateBuilder:

public static class PredicateBuilder {

    public static Expression> And(this Expression> a, Expression> b) {    

        ParameterExpression p = a.Parameters[0];

        SubstExpressionVisitor visitor = new SubstExpressionVisitor();
        visitor.subst[b.Parameters[0]] = p;

        Expression body = Expression.AndAlso(a.Body, visitor.Visit(b.Body));
        return Expression.Lambda>(body, p);
    }

    public static Expression> Or(this Expression> a, Expression> b) {    

        ParameterExpression p = a.Parameters[0];

        SubstExpressionVisitor visitor = new SubstExpressionVisitor();
        visitor.subst[b.Parameters[0]] = p;

        Expression body = Expression.OrElse(a.Body, visitor.Visit(b.Body));
        return Expression.Lambda>(body, p);
    }   
}

И класс утилиты для замены параметры в лямбда:

internal class SubstExpressionVisitor : System.Linq.Expressions.ExpressionVisitor {
        public Dictionary subst = new Dictionary();

        protected override Expression VisitParameter(ParameterExpression node) {
            Expression newValue;
            if (subst.TryGetValue(node, out newValue)) {
                return newValue;
            }
            return node;
        }
    }

23
задан David Clarke 11 May 2015 в 02:12
поделиться

2 ответа

Вот мой дубль. Если вам не нужно регулярное выражение, вы можете использовать -like или .contains (). Вопрос никогда не говорит, что такое шаблон поиска. Вот пример с текстовым файлом Windows.

$file = (get-content -raw file.txt) -replace "`r"  # avoid the line ending issue

$pattern = 'two
three
f.*' -replace "`r"

# just showing what they really are
$file -replace "`r",'\r' -replace "`n",'\n'
$pattern -replace "`r",'\r' -replace "`n",'\n'

$file -match $pattern

$file | select-string $pattern -quiet 
0
ответ дан js2010 11 May 2015 в 02:12
поделиться

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

$fileContent = [io.file]::ReadAllText("c:\file.txt")
$fileContent |
    Select-String '(?smi)ap71xx[^!]+!' -AllMatches |
    %{ 

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

$fileContent |
    Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
    %{ 

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[io.file]::ReadAllText("c:\file.txt") |
    Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
    %{ 

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Matches } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Groups[1] } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Value }
.Matches } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[io.file]::ReadAllText("c:\file.txt") |
    Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
    %{ 

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Matches } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Groups[1] } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Value }
.Groups[1] } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[io.file]::ReadAllText("c:\file.txt") |
    Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
    %{ 

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Matches } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Groups[1] } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Value }
.Value }

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[io.file]::ReadAllText("c:\file.txt") |
    Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
    %{ 

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Matches } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Groups[1] } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Value }
.Matches } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

$fileContent |
    Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
    %{ 

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[io.file]::ReadAllText("c:\file.txt") |
    Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
    %{ 

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Matches } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Groups[1] } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Value }
.Matches } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[io.file]::ReadAllText("c:\file.txt") |
    Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
    %{ 

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Matches } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Groups[1] } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Value }
.Groups[1] } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[io.file]::ReadAllText("c:\file.txt") |
    Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
    %{ 

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Matches } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Groups[1] } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Value }
.Value }

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[io.file]::ReadAllText("c:\file.txt") |
    Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
    %{ 

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Matches } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Groups[1] } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Value }
.Value }

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

$fileContent |
    Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
    %{ 

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[io.file]::ReadAllText("c:\file.txt") |
    Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
    %{ 

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Matches } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Groups[1] } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[112].Value }
.Matches } | %{

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

[110]

Регулярное выражение ap71xx[^!]*! будет работать лучше, и использование .* в регулярном выражении не рекомендуется, поскольку оно может генерировать неожиданные Результаты. Шаблон [^!]+! будет соответствовать любому символу, кроме восклицательного знака, за которым следует восклицательный знак.

Если в выходных данных начало блока не требуется, обновленный сценарий:

[111]

Groups[0] содержит всю совпавшую строку, Groups[1] будет содержать совпадение строки в пределах круглые скобки в регулярном выражении.

Если $fileContent не требуется для какой-либо дальнейшей обработки, переменная может быть удалена:

[io.file]::ReadAllText("c:\file.txt") |
    Select-String '(?smi)ap71xx([^!]+!)' -AllMatches |
    %{ 

В случае, если это все еще может иметь значение для кого-то и в зависимости от фактического требования, регулярное выражение в ответе Кейта не должно быть таким сложным. Если пользователь просто хочет вывести каждый блок, будет дос

3
ответ дан David Clarke 11 May 2015 в 02:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: