Для некоторой обработки данных мне нужно разбить строку на несколько элементов. Пример входной строки является:Соответствие определенного символа, если оно находится между двумя цифрами с регулярным выражением
'one, two & three and four-five 123-456'
Теперь, мне нужно, чтобы отделить эту строку в пункты, где возможные разделители ,
, &
, (пробел),
and
, -
. Но, и это тот момент, когда я застрял, он не должен делиться на -
, когда он находится между двумя числами.
Я использую PHP и preg_split
сделать фактическое разделение, но мне нужен шаблон регулярного выражения, чтобы соответствовать ограничителей за исключением разделителем -
, когда он находится между двумя числами (цифрами, но также может быть 123-456
). Подавление пробелов вокруг каждого элемента выполняется с помощью trim()
в PHP.
Я использую следующий регулярное выражение:
/(and|,|\s|&)|\D(-)\D/
Выходной сигнал (после использования preg_split
и т.д.) является:
[0] => one
[1] => two
[2] => three
[3] => fou
[4] => ive
[5] => 123-456
Рабочим является правильным, но он также занимает последний и первый буква окружающего текста для разделителя -
. Элемент 123-456
верен, так как он не должен совпадать (и разбиваться на preg_split
) на -
, когда он сразу же окружен цифрой.
Ожидаемый результат:
[0] => one
[1] => two
[2] => three
[3] => four
[4] => five
[5] => 123-456
Любая помощь приветствуется, если какая-либо информация отсутствует, дайте мне знать, и я буду обновлять свой вопрос.
спасибо. Это решило мой вопрос. Я приму ваш ответ через несколько минут, когда это позволит мне. Из интереса, в чем причина различия в обозначениях для первой части? Он работает точно так же, как и мой, но делает ли он что-то еще? –
Я добавил краткое объяснение. –
Последняя сторона чередования должна быть '(? revo