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

Я ищу шаблон, который соответствует всему до первого вхождения определенного символа, скажите a""; - точка с запятой.

Я записал это:

/^(.*);/

Но это на самом деле соответствует всему (включая точку с запятой) до последнего вхождения точки с запятой.

316
задан Leon Fedotov 12 April 2013 в 12:02
поделиться

6 ответов

Вам нужно

/[^;]*/

[^;] - это символьный класс , он соответствует всему, кроме точки с запятой.

Для цитирования страницы perlre manpage:

Вы можете указать класс символов, приложив список символов в [], который будет соответствовать любому символу из списка. Если первый символ после "[" - это "^", то класс будет соответствовать любому символу из списка.

Это должно работать на большинстве регексных диалектов.

453
ответ дан 23 November 2019 в 01:04
поделиться

Будет ли;

/^(.*?);/

работать?

? - ленивый оператор, поэтому регекс захватывает как можно меньше перед совпадением с ;.

276
ответ дан 23 November 2019 в 01:04
поделиться

/^[^;]*/

Говорит [^;] соответствует чему угодно, только не точке с запятой. Квадратные скобки являются оператором совпадения множества, по сути, совпадают с любым символом в этом наборе символов, ^ в начале означает обратное совпадение, поэтому совпадают все а не в этом наборе.

34
ответ дан 23 November 2019 в 01:04
поделиться

это не регрессивное решение, а что-то достаточно простое для описания вашей проблемы. Просто разделите строку и получите первый элемент из массива.

$str = "match everything until first ; blah ; blah end ";
$s = explode(";",$str,2);
print $s[0];

output

$ php test.php
match everything until first
5
ответ дан 23 November 2019 в 01:04
поделиться

Попробуйте /[^;]*/

Google regex character classes для получения подробной информации.

15
ответ дан 23 November 2019 в 01:04
поделиться

Попробуйте /[^;]*/

Это отрицательный класс символов .

10
ответ дан 23 November 2019 в 01:04
поделиться
Другие вопросы по тегам:

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