2015-05-29 2 views
0

Строка, которая начинается И заканчивается символом, не должна совпадать.Regexp - Как проверить, начинается ли строка OR с заданным символом?

Это просто проще сделать что-то вроде:

$string = '!test'; 
preg_match('/^(!?)([a-z0-9]{1,10})(!?)$/i', $string, $matches); 

и исследовать $ матчи?

+0

Не могли бы вы подробнее рассказать о требованиях? '! test' начинается с'! 'и заканчивается на' t', поэтому он должен совпадать? Не являются ли 'substr ($ string, 0, 1)' и 'substr ($ string, -1)' достаточно? Не могли бы вы предоставить два примера ввода, 1 действительный и 1 неверный? –

+0

@stribizhev Я также тестирую символы в середине, поэтому мне нужно регулярное выражение. В этом примере «заданный символ» - «!». Я хочу проверить, начинается ли строка OR или заканчивается символом '!'. – GrumpyHat

+0

Пожалуйста, объясните, что вы хотите совместить в целом, включая материал между ними. В словах. – simbabque

ответ

3

Если есть только один символ в начале или в конце концов, это так просто, как сказать это:

/^!|!$/ 

Нет необходимости улавливающей группы.


Update: Чтобы убедиться, что вы получите либо восклицательный знак и десять букв или десять букв, а восклицательный знак, построить свой рисунок так:

/^!?[a-z0-9]{1,10}$|^[a-z0-9]{1,10}!?$/ 

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

Я собрал a unit test in regex101 for this.

+0

Спасибо, но мне нужно также проверить символы между ними. Выполнение этого на данный момент: '! Preg_match ('/^(!?) ([A-z0-9] {1,10}) (!?) $/I', $ code, $ matches) || ($ matches [1] && $ matches [3]) ' – GrumpyHat

+1

Не пытайтесь построить сложное регулярное выражение. Просто напишите несколько строк кода. Это проще в обслуживании. – simbabque

Смежные вопросы