Autor Zpráva
imploder
Profil
Potřebuju pomocí RV (PCRE) matchovat řetězec až do prvního výskytu dvojice znaků [zpětné lomítko] [konec řádku].
Po první zpětné lomítko:
^.*?\\

Po první konec řádku:
^.*?\n

Tohle funguje, ale potřeboval bych prostě to zkombinovat, aby to nebylo po jeden znak, ale po oba ty znaky za sebou. Tohle nefunguje:
^.*?\\\n

Nevíte, jak to udělat?

pozn.: je zapnutý modifikátor /s, tzn. berou se všechny řádky řetězce dohromady a tečka zahrnuje i konec řádku
Majkl578
Profil
$data = 'foo
bar\
baz';

preg_match('~^(.*)\\\\\n~Us', $data, $match);

var_dump($match);
Samotné \ se musí ještě escapovat. Escapováné \\ je \\\\.
imploder
Profil
Majkl578:
Zvláštní je, že v Perlu mi to takhle funguje:
my $text = 'foo
bar\
baz';

$text =~ /^(.*?)\\\n/s;
print $1;

a to se čtyřma lomítkama naopak ne. V PHP jsem to zkoušel (a taky na regexp.cz), ale asi se to teda nechová úplně stejně jako v Perlu.

Nakonec jsem se to vyřešil bez RV.
Majkl578
Profil
imploder:
Perl neznám, takže nemohu soudit. Nicméně tipl bych, že to souvisí s ohraničením řetězce uvozovkami.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0