Как уже упоминалось в комментариях, в третьей строке эта часть ntp-server.niehs.nih.gov
, которая не соответствует \w
Но вы можете упростить выражение, сопоставив не косую черту, используя класс отрицательных символови повторяющийся паттерн, который соответствует прямому слешу, а затем снова 1+ раз, а не прямому слешу.
Тогда вы можете разделить ваш матч по слешу.
Паттерн
"taxonomy": "\K[^/\n]+(?:/[^/\n]+)+(?=")
Объяснение
"taxonomy":
Совпадение буквально "\K
Подберите двойные кавычки и затем забудьте, что было найдено, используя \K
[^/\n]+
Совпадение 1+ раз, а не прямая косая черта с использованием отрицательного класса символов (?:/[^/\n]+)+
Повторение шаблона для совпадения /
, затем 1+ раз не /
(?=")
Позитивный взгляд на то, что справа - двойная кавычка
Демонстрация на regex101 | Php demo
Например, если вы используете explode в php:
$pattern = '~"taxonomy": "\K[^/\n]+(?:/[^/\n]+)+(?=")~';
$strings = [
'"taxonomy": "abc/about_abc/bsc/archive/2009/presentations_dec"',
'"taxonomy": "about/archive/term"',
'"taxonomy": "_decommisioned/ntp-server.niehs.nih.gov/htdocs/results_status/resstatf"'
];
foreach ($strings as $string) {
preg_match($pattern, $string, $match);
print_r(explode('/', $match[0]));
}
Результат:
Array
(
[0] => abc
[1] => about_abc
[2] => bsc
[3] => archive
[4] => 2009
[5] => presentations_dec
)
Array
(
[0] => about
[1] => archive
[2] => term
)
Array
(
[0] => _decommisioned
[1] => ntp-server.niehs.nih.gov
[2] => htdocs
[3] => results_status
[4] => resstatf
)