2015-08-03 2 views
2

Я работаю над регулярным выражением прямо сейчас. Моя проблема в том, что моя строка может содержать 2 или 3 имени. Я хочу получить первое имя, а затем второе и третье, как одну строку.Regex anchor string

Вот небольшой PowerShell скрипт:

$string = "ALDERS PAUL GERARD" 
$string2 = "Alders Paul" 

$pattern = '^(.*)\s(.*)$' 



if($string -match $pattern){ 
    $last = $Matches[1] 
    Write-Host "Success - $last" 
} 

if($string2 -match $pattern){ 
    $last = $Matches[1] 
    Write-Host "Success - $last" 
} 

Результаты являются Success - Alders Пол и Успех - Alders

Как я могу сделать регулярное выражение якорь на первом пространстве, а не второе пространство в линия? Так я получаю Успех - ольхи и успех - Alders

ответ

4

Вы должны использовать ленивые соответствие с ударным первым группы:

^(.*?)\s(.*)$ 
    ^

См Demo 1

От rexegg.com Lazy Quantifier Solution:

Ленивый .*? гарантирует, что квантифицированная точка будет соответствовать столько символов, сколько необходимо для остальной части шаблона.

Или используйте непробельный сокращенный класс \S (т.е. соответствие любого символа, кроме пробельных символов):

^(\S*)\s(.*)$ 

Вот это second demo

+1

Потрясающие спасибо за ответ! – Peter3