Nasıl bir köşeli ayraç RegEx kullanarak literal maç?

6 Cevap php

Bir köşeli ayraç maç için regex nedir? I eregi_replace bir desen \\] kullanıyorum, ama bulmak mümkün görünmüyor ] ...

6 Cevap

\] Doğru, ama sen \ \ [(literal dize veya farklı bir tür) kullanmak zorunda kalabilirsiniz bu yüzden PHP kendisi de, bir kaçış karakteri olarak \ olduğunu unutmayın.

Sorunsuz çalışıyor:

<?php
    $hay = "ab]cd";
    echo eregi_replace("\]", "e", $hay);
?>

Çıktı:

abecd

You don't need to escape it: if isolated, a ] is treated as a regular character.
Tested with eregi_replace and preg_replace.

[, Onu kaçmak için başka bir canavar var edilir. Tek tek ve çift tırnak, veya çift kaçış gibi görünüyor tüm hem regex aileler için, PHP ile aynı kabul edilir.

Belki de sorun başka bir yerde sizin ifadede, sen tam olarak vermelidir.

Bunu yapmanın iki yolu vardır:

/ [\]] /x;

/  \]  /x;

Eğer gerçekten iyi bir seçenek olarak ikinci ve düşünebilirsiniz iken ben basit regexplerde kullanmayı düşünün. Ben büyük regexplerde için eski, daha iyi bir seçenek düşünün. Aşağıdaki düşünün:

/ (\w*) (  [\d\]] ) /x;

/ (\w*) ( \d | \] ) /x;

Bu örnekte, önceki zaman tercih edilen bir çözümdür. Bu ayrı varlıklar birleştirerek daha iyi bir iş yapar, hangi olabilir verilen yerde her maç. Ayrıca uygulanması ile ilgili olarak, bazı hız yararları olabilir.

Note: This is in Perl syntax, partly to ensure proper highlighting.
In PHP you may need to double up on the back-slashes. "[\\]]" and "\\]"

. Net bir ters eğik çizgi ekleyerek özel karakterler kaçış; Bu olacak anlamına gelen "\"; "[" ...

Normalde bunu beri string literals böyle bir şey yapmak zorunda olurdu ya rağmen;

@"\["

ya da bunun gibi bir şey;

"\\["

Eğer sorun basit tırnak içinde ilk parametre ile eregi_replace kullanarak gerçeğinden gelebilir:

 '\['

O changes the way the parameter işleve beri double quotes, olsa, bu bağlamda bağlı olarak iyi çalışır, (basit tırnak sadece çift dolayısıyla ihtiyaç, herhangi bir yorumlama olmadan dize geçebileceği ) "\" karakteri için.

"\[" bir kaçış karakteri olarak yorumlanır Burada, eğer, yine "\" çift gerekir.

Not: Yorumlarınız dayanarak, size regex deneyebilirsiniz

<\s*(?:br|p)\s*\/?\s*\>\s*\[

tespit etmek amacıyla, bir [ hemen sonra bir <br> ya da <p>