<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом ПХП</title>
<link>https://blogengine.ru/blogs/tags/php-2/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Доллар в регвыражениях не всегда означает конец строки</title>
<guid isPermaLink="false">125309</guid>
<link>https://ilyabirman.ru/meanwhile/all/dollar-not-only-end/</link>
<pubDate>Wed, 03 Jan 2024 19:08:26 +0500</pubDate>
<author>Илья Бирман</author>
<comments>https://ilyabirman.ru/meanwhile/all/dollar-not-only-end/</comments>
<description>
&lt;p&gt;&lt;a href="https://ilyabirman.ru/meanwhile/"&gt;Илья Бирман&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Долго боролся сейчас с одним багом, поэтому пишу себе, чтобы не забыть.&lt;/p&gt;
&lt;p&gt;Есть регулярное выражение (для примера):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;tt&gt;/(some|any)thing$/i&lt;/tt&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Доллар, уверен я, означает «конец строки». Выражение должно проверять, что строка заканчивается на слово something или anything в любом регистре. Но вот оно иногда срабатывает, даже если строка не заканчивается на него! Я в отчаянии уже проверяю впрямую, что строка заканчивается на g или G, и точно вижу, что она не заканчивается. А выражение срабатывает!&lt;/p&gt;
&lt;p&gt;Замечаю, что это происходит, если в конце выражения стоит возврат каретки. Думаю: какого хрена? У меня же написан доллар сразу после g, никаких возвратов каретки там! Модификатора /m, который разделяет текст на отдельные строки, нет. Может, он как-то там по умолчанию включился, и надо его, наоборот, отключить?&lt;/p&gt;
&lt;p&gt;От безысходности &lt;a href="https://www.php.net/manual/en/reference.pcre.pattern.modifiers.php"&gt;иду читать документацию&lt;/a&gt;. Никакого антонима модификатору /m не нахожу. Читаю про сам /m:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;tt&gt;m (PCRE_MULTILINE)&lt;/tt&gt;&lt;br /&gt;
By 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).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Что? Что ещё за нахрен /D?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;tt&gt; D (PCRE_DOLLAR_ENDONLY)&lt;/tt&gt;&lt;br /&gt;
If 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).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Как же можно было такую дичь придумать? Исправляю регулярное выражение:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;tt&gt;/(some|any)thing$/iD&lt;/tt&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;А также запоминаю, что надо теперь вообще всегда использовать модификатор /D, потому что если блин мне надо возврат каретки мэтчить, я это в состоянии впрямую сформулировать внутри регвыражения, а не полагаться на это хитрожопое исключение.&lt;/p&gt;
</description>
</item>


</channel>
</rss>