2015-12-22 3 views
1

У меня есть следующий код, и я пытаюсь узнать, действительна ли строка в соответствии с регулярным выражением. Я пытаюсь проверить только строки, которые следуют следующей последовательности.Регулярное выражение с дополнительными |

lettersOrNumbersAndunderDashes=lettersOrNumbersAndUnderdashes 

Но эта последовательность может повторяться, если имеется вертикальная полоса.

Например parameter1=value1|parameter2=value2|parameterN=valueN

if (preg_match("/((^[A-Za-z0-9_]+=[A-Za-z0-9_]+)\|?)/m", "perPd_asd=as_3_4d|asdas=asdasd")) 
    return 'Valid'; 

    return 'Invalid'; 

Я думаю, что я что-то отсутствует или здание неправильное регулярное выражение.

+0

Первая строка содержит только один '='. https://regex101.com/r/yZ4qE2/1 Также '[A-Za-z0-9_]' может быть '\ w'. – chris85

+0

Может ли быть немного более конкретным в этом вопросе? Я довольно новичок в regex –

+0

Ваше выражение говорит 'stuff', затем' = 's then' stuff'. Ваша первая строка соответствует этому, потому что есть один '='. Ваша секунда останавливается после первого '='. (моя версия regex101 инвертирована, потому что я начал назад). – chris85

ответ

0

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

if (preg_match("/(([A-Za-z0-9_]+=[A-Za-z0-9_]+)\|?)/m", "perPd_asd=as_3_4d|asdas=asdasd")) 
return 'Valid'; 

return 'Invalid'; 
0

Возможно, имя параметра начинается с номера?

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

0=somevalue 
param=value| 
[email protected]#$%^|some_param=some-value 
_=VALUE|abc=*** 
a=1|b=2|c=3 
param=0|param=1 

мое решение:

^(([_A-Za-z][A-Za-z0-9_]*=[^\|=]+)\|)*([_A-Za-z][A-Za-z0-9_]*=[^\|=]+)$