Regex

dakata__92

Super Moderator
Някой може ли да ми драсне Regex който да валидира правлно нещата. Става дума примерно имам лице с три имена и когато има въпросителна между две от имената да е валидно.
Иван Стоянов Бръмков
Иван ? Бръмков - валидно
? Иван ? Бръмков - невалидно
? Иван ? Бръмков ? - невалидно
Тоест да взима името и фамилията и да търся презимето.
 
Така?
Код:
^[A-ZА-Я][a-zа-я]+?\s*?\?\s*?[A-ZА-Я][a-zа-я]+$
http://regex101.com/r/xL7pE2/2
или:

Код:
^
[A-ZА-Я][a-zа-я] # Първо име
+?\s*?\?\s*? # Евентуални спейсове около "?"
[A-ZА-Я][a-zа-я]+ # Фамилно име
$

(същото)
Малко обяснение:

четем главна буква и след нея малки букви, после евентуални спейсове, после ? и отново евентуални спейсове и после главна буква, последвана от малки букви.
 
Да стана. Как мога да матчвам само три имена?
пример:ДРАГО ИВАНОВ ДРАГАНОВ
Не е задължително да е с preg_match.
Трябва ми някакво условие if(нещо), което да разбере, че в стринга подавам трите имена на дадено лице а не просто две от имената или едно. За preg_match ще трябва да се ползва флага(режима) "u".
Чудех се дали да не ползвам stripos по някакъв начин, но ми се вижда много излишен код за драскане. Гоня бързодействие, поради факта, че работя с голям текстоф файл и желая да спестя максимално проверките. :)
 
Не мисля, че може да стане без рег. израз... твърде сложно е, за да използваш само string функциите...

Код:
/^[а-я]+\s+[а-я]+\s[а-я]+$/i

case insensitive слагам защото очевидно няма особено значение дали започва с главна / малка буква.
 
Анонимен спечели си плюсчето, но ми трябва още малко помощ и за да не отварям нова тема ще пиша тук. Горе долу разбирам от regex и си ги донагаждам както ми е удобно твоите кодове. Аааа идва един проблем сега. Как от файла да изкарам текста между различни редове? Ползвам preg_match_all();
Примерен стринг:
http://regex101.com/r/uO4aT5/1
 
dakata__92 каза:
Анонимен спечели си плюсчето, но ми трябва още малко помощ и за да не отварям нова тема ще пиша тук. Горе долу разбирам от regex и си ги донагаждам както ми е удобно твоите кодове. Аааа идва един проблем сега. Как от файла да изкарам текста между различни редове? Ползвам preg_match_all();
Примерен стринг:
http://regex101.com/r/uO4aT5/1
Има един трик \d\D - което е цифра или не-цифра, тоест да матчва всеки символ.
http://regex101.com/r/uO4aT5/4
Защото точката матчва всичко не-\n, a използвайки \d\D матчваш абсолютно всичко.
 

Back
Горе