Интересный ход с незахватываемым "[A-Z][A-Za-z\s \.]"
Только стоимость жутко выросла.
Вложенный незахватываемый блок не нужен - получаем вложенный match, который вообще не используется, лучше заменить символьным классом.
ИЛИ также лучше заменить на символьные классы - сложность их раскрытия много меньше альтернативной ветки.
[\s ]* - избыточность, хотя интерпретатор должен сам её устранить
https://regex101.com/r/R43vAB/1
Понизили стоимость с 4361 до 1275.
My bad)) Я убрал экоанирование точки - прочитал что в скобках оно не нужно, но после этого поломалось. И еще - этот паттерн подразумесает любые повторения слов - : word, word, Word word;
а можно сделать так чтоб не более 3-х слов попадало и только если кэпитал леттер? То есть:
New York, NY, USA ;- попало
New York, Florida, NY, USA; - не попало
new york, NY, usa; не попало
Заглавная буква проверяется и в обычном варианте https://regex101.com/r/F2WzQJ/1 и с опережающей проверкой https://regex101.com/r/3IfTHj/1
А вот с учётом 3-х запятых... Теоретически можно, но это будет либо две тернарки, либо 2 ИЛИ. Стоимость исполнения вырастет катастрофически. Может какие-то вариации комбинирования опережающих проверок с тернаркой, но тоже будет очень сложная конструкция.
Даже пытаться не стану - да уже за те варианты которые предложены выше надо отрывать руки - в продакшине такому не место.
Как альтернативный вариант - https://regex101.com/r/7S9KSB/1
Результат должен быть примерно тот же, но запрос будет более ресурсоёмким за счёт дополнительной опрежающей проверки.
Выборка будет без подгрупп, но с "концевыми" знаками препинания и пробелом.
споткнулось на таком :
"Note: Google’s hybrid workplace includes remote roles.
Remote location: Brazil."
Также проблем не вижу.
https://regex101.com/r/xgPrvA/1
14 и 17 выборки.
Может какие-то спецсимволы есть в исходном тексте?
Note: By applying to this position you will have an opportunity to share your preferred working location from the following: New York, NY, USA; San Francisco, CA, USA.
результат:By applying to this position you will have an opportunity to share your preferred working location from the following; New York, NY, USA; San Francisco, CA, USA
Вообще проблем не вижу (15, 16 выборки) - https://regex101.com/r/6hfgak/1
Но, в целом, для снижения false positive лучше сделать так - https://regex101.com/r/yNZTpQ/1
Числа экспериментально подберите.
Я к сожалению не могу полагаться на "locations", нет гарантии что это скрипт а не контентщик) А в таком случае мне может прилететь "locations, lacations, lacotion" etc ))) Я вообще не могу на текст полагаться, только на шаблон, что будет что то типа [city, state, country[,;]], причем в словах могут быть точки и пробелы - Vashingthon D.C.
Ну таки если нельзя полагаться на текст, то остаётся только пунктуация
https://regex101.com/r/KCVie5/1
Но при таком подходе сплит однозначно лучше регекспа.
я уже писал - сплиты не подходят, нужно вычленить только регуляркой. Мой вариант работает, но искал еще варианты
Здесь и вычленяется регуляркой, сплитится уже вычленение.
Из этого вычленения также можно всё достать второй регуляркой вместо сплита. Но одной сделать не получится - текст слишком "неоднородный".
Ну или если мы гарантированно знаем, что "префикс" строки содержит "location.*:", то делать а-ля https://regex101.com/r/LCOGoA/1
Но сплитить группу всё-равно придётся. На условном php
$str = "This role may also be located in our Playa Vista, CA campus.Note: By applying to this position you will have an opportunity to share your preferred working location from the following: Mountain View, CA, USA; Atlanta, GA, USA; Boulder, CO, USA; Chicago, IL, USA; New York, NY, USA; Los Angeles, CA, USA; San Francisco, CA, USA; Washington D.C., DC, USA.This role may also be located in our Playa Vista, CA campus.Note: Google’s hybrid workplace includes remote and in-office roles. By applying to this position you will have an opportunity to share your preferred working location from the following:In-office locations: San Francisco, CA, USA; Boulder, CO, USA; Los Angeles, CA, USA.Remote location(s): California, USA; Colorado, USA.Please submit your resume in English - we can only consider applications submitted in this language.Note: Google’s hybrid workplace includes remote rolesRemote location: Brazil.";$pattern = "/(location.*?:)([a-zA-Z ,;\.]*)([\.;])/";$split = array();if(preg_match_all($pattern, $str, $matches)) foreach($matches[2] as $val) $split = array_merge($split, explode(";", $val)); print_r($split);
не ясно выразился.
в исходниках:
Please submit your resume in English - we can only consider applications submitted in this language.
Note: Google’s hybrid workplace includes remote roles
А, обсуждение не читал :)
Тогда без шансов, только по словарю.
USA ни везде есть))
где нет?