РАЗДЕЛ about_Split КРАТКОЕ ОПИСАНИЕ Описание использования оператора split для разбивки одной или нескольких строк на подстроки. ПОЛНОЕ ОПИСАНИЕ Оператор split используется для разбивки одной или нескольких строк на подстроки. Можно изменять следующие элементы операции split. -- Разделитель. По умолчанию в качестве разделителя используется пробел, однако можно указать и символы, строки, шаблоны или блоки скриптов, задающие разделитель. -- Максимальное количество подстрок. По умолчанию выводятся все подстроки. Если задано число меньше числа подстрок, оставшиеся подстроки объединяются в последнюю подстроку. -- Параметры, задающие состояния, с которыми производится сопоставление разделителя, например, SimpleMatch и Multiline. СИНТАКСИС В следующей схеме показан синтаксис использования оператора -split. Имена параметров не отображаются в команде. Включать в команду нужно только значения параметров. Значения должны появляться в порядке, показанном на схеме синтаксиса. -Split <String> <String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]] <String> -Split {<ScriptBlock>} [,<Max-substrings>] В любой команде split можно заменять на -iSplit или -cSplit для -split. В операторах -iSplit и -split регистр не учитывается. В операторе -cSplit при применении правил разделения регистр учитывается. ПАРАМЕТРЫ <String> Задает одну или несколько строк для разбивки. При указании нескольких строк все строки разбиваются по одним и тем же правилам. Пример. -split "red yellow blue green" red yellow blue green <Delimiter> Символы, указывающие на конец подстроки. По умолчанию в качестве разделителя используются пробелы с учетом непечатаемых символов, например, символа новой строки (`n) и символа табуляции (`t). При разбивке строк разделитель исключается из всех подстрок. Пример. "Lastname:FirstName:Address" -split ":" Lastname FirstName Адрес <Max-substrings> Указывает максимальное количество выводимых подстрок. По умолчанию это все подстроки, разделенные разделителем. Если фактическое количество подстрок больше, они объединяются в последней подстроке. Если фактическое количество подстрок меньше, выводятся все подстроки. При выборе значения 0 и отрицательных значений будут выведены все подстроки. Если в оператор split отправляется несколько строк (массив строк), параметр Max-substrings применяется к каждой строке отдельно. Пример. $c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" $c -split ",", 5 Mercury Venus Earth Mars Jupiter,Saturn,Uranus,Neptune <ScriptBlock> Выражение, указывающее правила применения разделителя. Выражение должно иметь значение $true или $false. В фигурных скобках содержится блок скрипта. Пример. $c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" $c -split {$_ -eq "e" -or $_ -eq "p"} M rcury,V nus,Earth,Mars,Ju it r,Saturn,Uranus,N tun <Options> Заключите имя параметра в кавычки. Параметры действуют только при использовании в инструкции параметра <Max-substrings>. Синтаксис параметра Options: "SimpleMatch [,IgnoreCase]" "[RegexMatch] [,IgnoreCase] [,CultureInvariant] [,IgnorePatternWhitespace] [,ExplicitCapture] [,Singleline | ,Multiline]" Параметры SimpleMatch: -- SimpleMatch: использовать простое сравнение строк при оценке разделителя. Не может использоваться с RegexMatch. -- IgnoreCase: форсирует сопоставление без учета регистра, даже если задан оператор -cSplit. Параметры RegexMatch: -- RegexMatch: для оценки разделителя используется сопоставление по регулярным выражениям. Это поведение установлено по умолчанию. Не может использоваться с SimpleMatch. -- IgnoreCase: Форсирует сопоставление без учета регистра, даже если задан оператор -cSplit. -- CultureInvariant: игнорирует культурные различия языков при оценке разделителя. Можно использовать только с RegexMatch. -- IgnorePatternWhitespace: игнорирует неизбежные пробелы и комментарии, помеченные символом номера (#). Можно использовать только с RegexMatch. -- Multiline: В многострочном режиме распознаются начало и конец строк и выражений. Можно использовать только с RegexMatch. По умолчанию используется однострочный режим (Singleline). -- Singleline: в однострочном режиме распознаются только начало и конец выражений. Можно использовать только с RegexMatch. По умолчанию используется однострочный режим (Singleline). -- ExplicitCapture: игнорирует группы сопоставлений без имен, и в списке результатов выводятся только группы явно именованных шаблонов. Можно использовать только с RegexMatch. УНАРНЫЕ И ДВОИЧНЫЕ ОПЕРАТОРЫ SPLIT Оператор унарной разбивки (-split <string>) имеет более высокий приоритет, чем запятая. Поэтому если отправить в оператор унарной разбивки список разделенных запятыми строк, разбиваться будет только первая строка (до первой запятой). Чтобы разбить несколько строк, нужно использовать оператор двоичной разбивки (<string> -split <delimiter>). Все строки следует заключать в скобки или сохранять в переменной, а затем отправлять в оператор split эту переменную. Рассмотрим следующий пример. -split "1 2", "a b" 1 2 a b "1 2", "a b" -split " " 1 2 a b -split ("1 2", "a b") 1 2 a b $a = "1 2", "a b" -split $a 1 2 a b ПРИМЕРЫ Следующая команда разбивает строку по пробелам. C:\PS> -split "Windows PowerShell 2.0`nWindows PowerShell with remoting" Windows PowerShell 2.0 Windows PowerShell with remoting Следующая команда разбивает строку по запятым. C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split ',' Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Следующая команда разбивает строку по шаблону "er". C:\PS>"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split 'er' M cury,Venus,Earth,Mars,Jupit ,Saturn,Uranus,Neptune Следующая команда выполняет разбивку по символу "N" с учетом регистра. C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -cSplit 'N' Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus, eptune Следующая команда выполняет разбивку по символам "e" и "t". C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[et]' M rcury,V nus, ar h,Mars,Jupi r,Sa urn,Uranus,N p un Следующая команда выполняет разбивку по символам "e" и "r", но ограничивает количество подстрок шестью. C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[er]', 6 M cu y,V nus, arth,Mars,Jupiter,Saturn,Uranus,Neptune Следующая команда разбивает строку на три подстроки. C:\PS> "a,b,c,d,e,f,g,h" -split ",", 3 a b c,d,e,f,g,h Следующая команда разбивает две строки на три подстроки. (ограничение применяется к каждой строке отдельно). C:\PS> "a,b,c,d", "e,f,g,h" -split ",", 3 a b c,d e f g,h Следующая команда разбивает каждую строку в строке Here String по первой цифре. Для распознания начала каждой строки используется параметр Multiline. 0 означает значение return all (вернуть все) параметра Max-substrings. Такие параметры как Multiline можно использовать, только если указано значение Max-substrings. C:\PS> $a = @' 1The first line. 2The second line. 3The third of three lines. '@ C:\PS> $a -split "^\d", 0, "multiline" The first line. The second line. The third of three lines. В следующей команде параметр SimpleMatch используется, чтобы оператор -split интерпретировал разделитель в виде точки (.) буквально. При использовании параметра по умолчанию RegexMatch символ точки в кавычках (".") интерпретируется как любой символ, кроме символа новой строки. В результате этого команда split выведет пустые строки для каждого символа, кроме символов новой строки. 0 означает значение return all (вернуть все) параметра Max-substrings. Такие параметры как SimpleMatch можно использовать, только если указано значение Max-substrings. C:\PS> "This.is.a.test" -split ".", 0, "simplematch" This is a test Следующая команда выполняет разбивку по одному или двум разделителям в зависимости от значения переменной. C:\PS> $i = 1 C:\PS> $c = "LastName, FirstName; Address, City, State, Zip" C:\PS> $c -split {if ($i -lt 1) {$_ -eq ","} else {$_ -eq ";"}} LastName, FirstName Address, City, State, Zip Следующие команды разбивают файл XML сначала по угловым скобкам, а затем по точкам с запятой. В результате выводится удобная для чтения версия файла XML. C:\PS> get-process powershell | export-clixml ps.xml C:\PS> $x = import-clixml ps.xml C:\PS> $x = $x -split "<" C:\PS> $x = $x -split ";" Для отображения результата введите "$x". C:\PS> $x @{__NounName=Process Name=powershell Handles=428 VM=150081536 WS=34840576 PM=36253696 ... СМ. ТАКЖЕ Split-Path about_Operators about_Comparison_Operators about_Join