Я ищу шаблон, который соответствует всему до первого вхождения определенного символа, скажите a""; - точка с запятой.
Я записал это:
/^(.*);/
Но это на самом деле соответствует всему (включая точку с запятой) до последнего вхождения точки с запятой.
Вам нужно
/[^;]*/
[^;]
- это символьный класс , он соответствует всему, кроме точки с запятой.
Для цитирования страницы perlre
manpage:
Вы можете указать класс символов, приложив список символов в [], который будет соответствовать любому символу из списка. Если первый символ после "[" - это "^", то класс будет соответствовать любому символу из списка.
Это должно работать на большинстве регексных диалектов.
Будет ли;
/^(.*?);/
работать?
?
- ленивый оператор, поэтому регекс захватывает как можно меньше перед совпадением с ;
.
/^[^;]*/
Говорит [^;] соответствует чему угодно, только не точке с запятой. Квадратные скобки являются оператором совпадения множества, по сути, совпадают с любым символом в этом наборе символов, ^
в начале означает обратное совпадение, поэтому совпадают все а не в этом наборе.
это не регрессивное решение, а что-то достаточно простое для описания вашей проблемы. Просто разделите строку и получите первый элемент из массива.
$str = "match everything until first ; blah ; blah end ";
$s = explode(";",$str,2);
print $s[0];
output
$ php test.php
match everything until first
Попробуйте /[^;]*/
Google regex character classes
для получения подробной информации.
Попробуйте /[^;]*/
Это отрицательный класс символов .