O kaçtı tırnak bir alıntı dize maç nasıl?

3 Cevap php
/^"((?:[^"]|\\.)*)"/

Bu dize karşı:

"quote\_with\\escaped\"characters" more

Ben açıkça tanımlanmış ettik rağmen sadece bir kaçış karakteri olarak \, \" kadar eşleşir (ve \_ ve \\ cezası maçlar ...).

3 Cevap

Eğer iki alternatiften sırasını çevirmek eğer düzgün çalışır:

/^"((?:\\.|[^"])*)"/

Sorun yoksa önemli \ karakter yemiş olur olduğunu before bu eşleştirme çalışır \". Ya çifti hem karakterler [^"] ile eşleşen olsun çünkü sadece \\ için daha önce çalışmış ve \_.

Yer alıyor kaçış dizilerinin başka yorumlanmasını sağlamak amacıyla ham-string değişmezleri ile Python kullanarak, aşağıdaki varyant çalışmaları yapar:

import re

x = re.compile(r'^"((?:[^"\\]|\\.)*)"')

s = r'"quote\_with\\escaped\"characters" more"'

mo = x.match(s)
print mo.group()

yaydığı {[(0)];} Ben senin sürümünde "değil doublequote" subexpression ([^"]) sen hemen-Aşağıdaki kaçan olarak alınması niyetinde tersbölüleri yutma (burada ikame varsa hangi ayrıca precociously maç kesmeleri) inanıyorum karakter. Ben burada yapıyorum tür tüm tersbölüler Dediğim gibi, bu değişiklik ile iş gibi görünüyor, bu şekilde yuttu ve DEĞİLDİR sağlamaktır.

Ben etrafında oynadım sadece başka bir bilgi şaşırtmak niyetinde değil. Regexp aşağıda (PCRE) (örn. \ ile biten ") yanlış sözdizimi eşleşmiyor çalışın ve hem de kullanabilir 'veya"

/('|").*\\\1.*?[^\\]\1/

php ile kullanmak için

<?php if (preg_match('/(\'|").*\\\\\1.*?[^\\\\]\1/', $subject)) return true; ?>

Için:

"quote\_with\\escaped\"characters"  "aaa"
'just \'another\' quote "example\"'
"Wrong syntax \"
"No escapes, no match here"

Bu tek maç:

"quote\_with\\escaped\"characters" and
'just \'another\' quote "example\"'