РЕГЭКС: хватая все до определенного слова - PullRequest
31 голосов
/ 29 сентября 2008

ex: <a><strike>example data in here</strike></a>

Я хочу все внутри тега, до конца

/<a>([^<]*)<\/a>/

Работает, когда в теге <a> нет дополнительных тегов, но что, если они есть?

Я хочу знать, можете ли вы сказать, чтобы он захватывал все до [^</a>] вместо [^<].

Делать это с /<a>(.*)<\/a>/ не очень хорошо. Иногда я получаю все в теге <a>, а иногда я получаю тонны строк, включенных в этот вызов.

1 Ответ

78 голосов
/ 29 сентября 2008
/<a>(.*?)<\/a>/

должно работать. ? делает его ленивым, поэтому он захватывает как можно меньше перед соответствием </a> части. но с помощью. будет означать, что он соответствует всему, пока не найдет </a>. Если вы хотите иметь возможность сопоставления между строками, вы можете использовать следующее, если с preg_match

/<a>(.*?)<\/a>/s

"s" в конце переводит регулярное выражение в режим "одной строки", что означает. символ соответствует всем символам, включая новые строки. Смотрите другие полезные модификаторы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...