#php #regex
#php #регулярное выражение
Вопрос:
Возможно ли добавить «фильтр» со словами, которые, если найдены, регулярное выражение не разделяет слова? — Вау, я надеюсь, что мой английский имеет смысл 🙂
Позвольте мне проиллюстрировать..
Это мое текущее регулярное выражение для разделения строк, таких как: TheStringIsSItTING Together
$taglist=preg_replace('/([a-z])([A-Z])/','$1 $2', $taglist);
С помощью строки примера регулярное выражение выдает: Строка находится в
Я хотел бы иметь фильтр, куда я мог бы поместить SItTING, чтобы регулярное выражение не разделяло это слово на части.
Пожалуйста, дайте мне знать, если мое объяснение было недостаточно хорошим, я все еще борюсь со своим английским 🙂
О, и спасибо за ОТЛИЧНОЕ сообщество!!
Ответ №1:
На самом деле вы не можете проверить, находитесь ли вы в середине слова, не разбивая это слово вручную с помощью поисковых утверждений, как это сделал @stema. Чтобы иметь список исключений, вам пришлось бы сделать это немного более программно.
$taglist = 'TheStringIsNowCurrentlySItTING';
$excludeList = array(
'SItTING',
'StringIs',
);
$exclusions = implode('|', $excludeList);
$tagArr = preg_split("/($exclusions)/", $taglist, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach ($tagArr as amp;$token) {
if (!in_array($token, $excludeList)) {
$token = preg_replace('/([a-z])([A-Z])/', '$1 $2', $token);
}
}
$taglist = implode(' ', $tagArr);
- Разбейте его на части на ваших исключенных условиях.
- Ставьте пробелы только в терминах, которые не исключены.
- Склейте все обратно с пробелами.
Комментарии:
1. идеально подходит для моих нужд! не думал о том, чтобы сделать это более программным способом. Большое спасибо!
Ответ №2:
Вы имеете в виду что-то вроде этого
([a-z])(?<!Slt)(?!TING)([A-Z])
Смотрите это здесь, в Regexr
Эта часть (?<!Slt)(?!TING)
представляет собой комбинацию отрицательного взгляда сзади и отрицательного предвидения. Они проверяют в этой позиции между строчной и прописной буквами, что слева нет «Slt» или «TING» справа.
Но будьте осторожны, оно также не будет соответствовать
Строка имеет значение SItFOO
Строка имеет значение Footing ==> Строка имеет значение FooTING
буквы не разделяются, как только один из поисковых путей завершается неудачей.
Смотрите здесь о Regexr