{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Блоги: заметки с тегом ПХП",
    "_rss_description": "Автоматически собираемая лента заметок, написанных в блогах на Эгее",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": false,
    "_itunes_explicit": "no",
    "home_page_url": "https:\/\/blogengine.ru\/blogs\/tags\/php-2\/",
    "feed_url": "https:\/\/blogengine.ru\/blogs\/tags\/php-2\/json\/",
    "icon": false,
    "authors": [
        {
            "name": "Илья Бирман",
            "url": "https:\/\/blogengine.ru\/blogs\/",
            "avatar": false
        }
    ],
    "items": [
        {
            "id": "125309",
            "url": "https:\/\/ilyabirman.ru\/meanwhile\/all\/dollar-not-only-end\/",
            "title": "Доллар в регвыражениях не всегда означает конец строки",
            "content_html": "<p>Долго боролся сейчас с одним багом, поэтому пишу себе, чтобы не забыть.<\/p>\n<p>Есть регулярное выражение (для примера):<\/p>\n<blockquote>\n<p><tt>\/(some|any)thing$\/i<\/tt><\/p>\n<\/blockquote>\n<p>Доллар, уверен я, означает «конец строки». Выражение должно проверять, что строка заканчивается на слово something или anything в любом регистре. Но вот оно иногда срабатывает, даже если строка не заканчивается на него! Я в отчаянии уже проверяю впрямую, что строка заканчивается на g или G, и точно вижу, что она не заканчивается. А выражение срабатывает!<\/p>\n<p>Замечаю, что это происходит, если в конце выражения стоит возврат каретки. Думаю: какого хрена? У меня же написан доллар сразу после g, никаких возвратов каретки там! Модификатора \/m, который разделяет текст на отдельные строки, нет. Может, он как-то там по умолчанию включился, и надо его, наоборот, отключить?<\/p>\n<p>От безысходности <a href=\"https:\/\/www.php.net\/manual\/en\/reference.pcre.pattern.modifiers.php\">иду читать документацию<\/a>. Никакого антонима модификатору \/m не нахожу. Читаю про сам \/m:<\/p>\n<blockquote>\n<p><tt>m (PCRE_MULTILINE)<\/tt><br \/>\nBy default, PCRE treats the subject string as consisting of a single «line» of characters (even if it actually contains several newlines). The «start of line» metacharacter (^) matches only at the start of the string, while the «end of line» metacharacter ($) matches only at the end of the string, or before a terminating newline (unless D modifier is set).<\/p>\n<\/blockquote>\n<p>Что? Что ещё за нахрен \/D?<\/p>\n<blockquote>\n<p><tt> D (PCRE_DOLLAR_ENDONLY)<\/tt><br \/>\nIf this modifier is set, a dollar metacharacter in the pattern matches only at the end of the subject string. Without this modifier, a dollar also matches immediately before the final character if it is a newline (but not before any other newlines).<\/p>\n<\/blockquote>\n<p>Как же можно было такую дичь придумать? Исправляю регулярное выражение:<\/p>\n<blockquote>\n<p><tt>\/(some|any)thing$\/iD<\/tt><\/p>\n<\/blockquote>\n<p>А также запоминаю, что надо теперь вообще всегда использовать модификатор \/D, потому что если блин мне надо возврат каретки мэтчить, я это в состоянии впрямую сформулировать внутри регвыражения, а не полагаться на это хитрожопое исключение.<\/p>\n",
            "date_published": "2024-01-03T19:08:26+05:00",
            "date_modified": "2024-01-03T19:11:32+05:00",
            "tags": [
                "программирование",
                "ПХП"
            ],
            "author": {
                "name": "Илья Бирман",
                "url": "https:\/\/ilyabirman.ru\/meanwhile\/",
                "avatar": "https:\/\/ilyabirman.ru\/meanwhile\/pictures\/userpic\/userpic@2x.jpg?1573933764"
            },
            "_date_published_rfc2822": "Wed, 03 Jan 2024 19:08:26 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "125309",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        }
    ],
    "_e2_version": 4079,
    "_e2_ua_string": "Aegea 11.0 (v4079e)"
}