Подтвердить что ты не робот

Regex соответствует первому вхождению строки

У меня есть эта строка:

Город. Это текст. Это еще несколько - и продолжается здесь.

Я хотел бы разбить строку на первом "-", чтобы найти "город" (просто примерное слово, это могут быть и другие слова). Плюс, чтобы найти остальную часть текста после '-'.

Я построил это выражение:

(^[\D\W\S]*)( - )([\D\W\S]*)

Но это находит последнее вхождение '-' вместо первого.

Как я могу остановиться в первом случае?

4b9b3361

Ответ 1

Простейшим решением было бы явно запретить тире быть частью первой группы:

^([^-]*) - (.*)

Объяснение:

^        # Start of string
([^-]*)  # Match any number of characters except dashes
\ - \    # Match a dash (surrounded by spaces)
(.*)     # Match anything that follows

Однако это не сработает, если ваша строка может содержать тире в первой группе (просто не окруженной пробелами). В этом случае вы можете использовать ленивые квантификаторы:

^(.*?) - (.*)

Объяснение:

^        # Start of string
(.*?)    # Match any number of characters, as few as possible
\ - \    # Match a dash (surrounded by spaces)
(.*)     # Match anything that follows