Разбор трудностей

Address Street - Name, LLC - City, GA
Address Street Name - Name NameLast - City Name, SC
Address-Street-Name - Name Last - City Name, NC

Выше приведены примеры данных, которые у меня есть, у меня есть около 20 из них, которые я зацикливаю и добавляю в базу данных. Я раньше использовал взорваться с ' - ' а также ',', который работал нормально, пока «Имя, ООО» не появился.

Как правильно разобрать выше? (Обратите внимание, что на имени возможна дополнительная запятая)

0

Решение

$string = "Address Street - Name, LLC - City, GA
Address Street Name - Name NameLast - City Name, SC
Address-Street-Name - Name Last - City Name, NC";

$regex = "/(.*?) - (.*?)$/m";

preg_match_all($regex, $string, $matches);

var_dump($matches);

Для данных, которые вы дали нам, это работает отлично. Поскольку вы только что опубликовали 3 комплекта, я не могу быть уверен, что он всегда работает.

Это регулярное выражение совпадает до первого - с пробелом до и после него. Затем группа захвата секунд сопоставляет все символы до конца строки.

1

Другие решения

Используйте substring () для передачи первых n — 4 символов для разнесения и еще один вызов substring () для передачи последних двух символов в вашу переменную State

Похоже, что единственный раз, когда вы встречаете запятую, которую вы хотели бы использовать для разбора, находится в конце каждой записи, перед аббревиатурой состояния.
Так как это только последние четыре символа (запятая, пробел и 2 символьная аббревиатура), вы можете просто передать подстроку длины strlen — 4 каждой записи, чтобы взорваться. Это фактически обрезает «, CA» от каждой записи.
Затем вы можете передать подстроку двух последних символов в вашу переменную State.

Если вы хотите получить лучший ответ, я предлагаю регулярные выражения с захватывать группы. Я сделал бы тебя один, но ты не дал мне достаточно образцов данных.

0