Максимальная длина шаблона регулярного выражения для Select-String? - PullRequest
2 голосов
/ 06 августа 2020

Есть ли максимальная длина текста для параметра Select-String -Pattern?

У меня есть список из ~ 500 слов (имен таблиц базы данных), которые объединены в одну строку. Длина строки составляет ~ 12500 символов.

'TABLE1|TABLE2|TABLE3|...

У меня нет сообщения об ошибке, но могу ли я быть уверен, что это сработает?

Ответы [ 2 ]

4 голосов
/ 06 августа 2020

Здесь параметр -Pattern в Select-String принимает string[].

-Pattern <string[]>

    Required?                    true
    Position?                    0
    Accept pipeline input?       false
    Parameter set name           (All)
    Aliases                      None
    Dynamic?                     false

Теперь максимальная длина строки составляет 2147483647 байт. Вы можете получить максимальную емкость строки следующим образом:

[text.stringbuilder]::new().MaxCapacity

Таким образом, максимальная длина Select-String RegEx может составлять 2147483647 байтов (но, скорее всего, вы достигнете нехватки памяти до этого момента ; -)

3 голосов
/ 06 августа 2020

В дополнение к теории, вот тест, который может дать вам некоторую уверенность.

Сначала мы просто создаем текстовый файл с 26 строками, каждая из которых содержит 1 символ английского алфавита sh, повторенный 40 000 раз.

$(
97..122 | foreach {"$([char]$_)" * 40000}
) | out-file c:\temp\longstringtest.txt -Encoding utf8

Теперь мы протестируем поиск строки из 20000 символов b.

$pattern = "b" * 20000

If(Select-String -path C:\temp\longstringtest.txt -Pattern $pattern){"Found it!"}

Found it!

Мы можем go вперед и увеличить его до 40000

$pattern = "b" * 40000

If(Select-String -path C:\temp\longstringtest.txt -Pattern $pattern){"Found it!"}

Found it!

Просто чтобы убедиться, что он действительно работает

$pattern = "ba" * 40000

If(Select-String -path C:\temp\longstringtest.txt -Pattern $pattern){"Found it!"} # No output

Мне не хватило смелости протестировать максимальный размер, указанный Васифом, но я подтвердил, что до 200 000 также работают нормально.

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