EDIT: Ответ и комментарий ниже заставляют меня думать, что я не объяснил это четко ... Я ищу регулярное выражение, которое соответствует нескольким вхождениям списка. Например, я могу взять ABCBCBCBCBCD, и я хочу получить от него массив [BC, BC, BC, BC, BC]. Я не знаю, сколько предметов будет в списке. Если это ABCD, мне нужен список [bc]. Если это ABCBCD, я хочу [bc, bc]. Я бы мог использовать/A (BC) + D/для соответствия всем вхождениям BC, но это не работает.Preg_match для элементов в списке
оригинальный вопрос ...
У меня есть набор очень больших файлов данных. В файле мне нужен только список элементов. Информация, которую я ищу, имеет формат:
...<RXCUI> <LN ID=531123>Amoxicillin</LN>, <LN ID=441656>Amikacin</LN></ERS>...
... означает, что существует тонна текста до и после этого набора. Я могу легко получить первый элемент в списке, используя регулярное выражение
preg_match('~<RXCUI>[^<]*(<LN[^>]*>[^<]*</LN>[^<]*)~', $data, $matches);
Затем $ матчей [1] имеет «Амоксициллин». Я попытался получить все совпадения в списке, используя:
preg_match('~<RXCUI>[^<]*(<LN[^>]*>[^<]*</LN>[^<]*)+~', $data, $matches);
Это не работает. У меня нет матчей. Каков синтаксис «Несколько совпадений для предыдущей последовательности между (и)»?
отметить, это то, что в $ спичек:
Array (
[0] => <RXCUI> <LN ID=531123>Amoxicillin</LN>, <LN ID=441656>Amikacin</LN>
[1] => <LN ID=531123>Amoxicillin</LN>
)
Итак, посмотрел на обоих элементов в списке, но только вернулся первый. Я хочу:
Array (
[0] => <RXCUI> <LN ID=531123>Amoxicillin</LN>, <LN ID=441656>Amikacin</LN>
[1] => <LN ID=531123>Amoxicillin</LN>
[2] => <LN ID=441655>Akikacin</LN>
)
это не https://regex101.com/r/dZ0vZ3/1 ok? – rock321987
@ rock321987 Это не сработает. Это соответствует всем записям LN. Мне нужны только записи LN, следующие за тегом RXCUI. – kainaw
Все содержимое тега 'LN' внутри' RXCUI' или только первое? – rock321987