Bu özel dize için preg_match_all nasıl kullanılır?

Preg_replace_all öğesini "this benim dizgem" den çıkarmak için kullanabilir miyim

$this->translate("this is my string")

Şu ana kadar sahip olduğum şey bu:

preg_match_all("/_[_|e]\([\"|\']([^\"|\']+)[\"|\']\)/i", '$this->translate("this is my string")', array());

" Bu benim dizgem " olsun. Bu nasıl yapılabilir?

0
bu "([^"] *) " regex kullanın.
katma yazar Avinash Raj, kaynak
Seçiminizi yapmak için ihtiyaç duyduğunuz kriterleri açıklayabilir misiniz? Her zaman $ this-> çeviri ("almaya çalıştığınız içerikten önce ve sonra bir ") olacak mı? Şu anda, dizeniz kodlanmış olduğundan ve basit dize işlemleriyle çözülmeye en uygun sorun olduğundan, örneğiniz aşırı derecede önemsizdir.
katma yazar Mike Brant, kaynak
Seçiminizi yapmak için ihtiyaç duyduğunuz kriterleri açıklayabilir misiniz? Her zaman $ this-> çeviri ("almaya çalıştığınız içerikten önce ve sonra bir ") olacak mı? Şu anda, dizeniz kodlanmış olduğundan ve basit dize işlemleriyle çözülmeye en uygun sorun olduğundan, örneğiniz aşırı derecede önemsizdir.
katma yazar Mike Brant, kaynak
Evet, dizgim her zaman $ this-> translate'den başlayacaktır ("almaya çalıştığınız içerikten önce ve bir") ve her zaman olan kod parçasını istiyorum: almaya çalıştığınız içerikten önce ve
katma yazar Jaskaran Singh, kaynak
Evet, dizgim her zaman $ this-> translate'den başlayacaktır ("almaya çalıştığınız içerikten önce ve bir") ve her zaman olan kod parçasını istiyorum: almaya çalıştığınız içerikten önce ve
katma yazar Jaskaran Singh, kaynak
Evet, dizgim her zaman $ this-> translate'den başlayacaktır ("almaya çalıştığınız içerikten önce ve bir") ve her zaman olan kod parçasını istiyorum: almaya çalıştığınız içerikten önce ve
katma yazar Jaskaran Singh, kaynak

8 cevap

Bir regex olmadan yapabilirsiniz, sadece arasındaki işlevini kullanın ( PHP kılavuzu ):

<?php
    function after ($this, $inthat)
    {
        if (!is_bool(strpos($inthat, $this)))
        return substr($inthat, strpos($inthat,$this)+strlen($this));
    };
    function before ($this, $inthat)
    {
        return substr($inthat, 0, strpos($inthat, $this));
    };
    function between ($this, $that, $inthat)
    {
        return before ($that, after($this, $inthat));
    };

   echo between ("(\"", "\")", "\$this->translate(\"this is my string\")");
?>

İşte bir örnek bir program çıktısı:

this is my string
0
katma
@MikeBrant: Üzgünüm öyle geldi. İşlevden önce "PHP" kelimesini kaldırdım.
katma yazar Wiktor Stribi?ew, kaynak
Cevabınızın ilk cümleyi, () arasındaki bir PHP işlevi olduğu ve öyle olmadığı anlamına geliyor. Bu kullanıcı tanımlı bir işlevdir (örneğin geri kalanında gösterdiğiniz gibi).
katma yazar Mike Brant, kaynak

Bir regex olmadan yapabilirsiniz, sadece arasındaki işlevini kullanın ( PHP kılavuzu ):

<?php
    function after ($this, $inthat)
    {
        if (!is_bool(strpos($inthat, $this)))
        return substr($inthat, strpos($inthat,$this)+strlen($this));
    };
    function before ($this, $inthat)
    {
        return substr($inthat, 0, strpos($inthat, $this));
    };
    function between ($this, $that, $inthat)
    {
        return before ($that, after($this, $inthat));
    };

   echo between ("(\"", "\")", "\$this->translate(\"this is my string\")");
?>

İşte bir örnek bir program çıktısı:

this is my string
0
katma
@MikeBrant: Üzgünüm öyle geldi. İşlevden önce "PHP" kelimesini kaldırdım.
katma yazar Wiktor Stribi?ew, kaynak
Cevabınızın ilk cümleyi, () arasındaki bir PHP işlevi olduğu ve öyle olmadığı anlamına geliyor. Bu kullanıcı tanımlı bir işlevdir (örneğin geri kalanında gösterdiğiniz gibi).
katma yazar Mike Brant, kaynak

Bir regex olmadan yapabilirsiniz, sadece arasındaki işlevini kullanın ( PHP kılavuzu ):

<?php
    function after ($this, $inthat)
    {
        if (!is_bool(strpos($inthat, $this)))
        return substr($inthat, strpos($inthat,$this)+strlen($this));
    };
    function before ($this, $inthat)
    {
        return substr($inthat, 0, strpos($inthat, $this));
    };
    function between ($this, $that, $inthat)
    {
        return before ($that, after($this, $inthat));
    };

   echo between ("(\"", "\")", "\$this->translate(\"this is my string\")");
?>

İşte bir örnek bir program çıktısı:

this is my string
0
katma
@MikeBrant: Üzgünüm öyle geldi. İşlevden önce "PHP" kelimesini kaldırdım.
katma yazar Wiktor Stribi?ew, kaynak
Cevabınızın ilk cümleyi, () arasındaki bir PHP işlevi olduğu ve öyle olmadığı anlamına geliyor. Bu kullanıcı tanımlı bir işlevdir (örneğin geri kalanında gösterdiğiniz gibi).
katma yazar Mike Brant, kaynak

Sadece aşağıdaki regex kullanabilirsiniz:

\(([^)]*)\)

Demo

0
katma

Sadece aşağıdaki regex kullanabilirsiniz:

\(([^)]*)\)

Demo

0
katma

Sadece aşağıdaki regex kullanabilirsiniz:

\(([^)]*)\)

Demo

0
katma

patlamak 'ı kullanarak:

$a = '$this->translate("this is my string")';
echo explode('"', $a)[1];

Çıktı:

this is my string
0
katma

patlamak 'ı kullanarak:

$a = '$this->translate("this is my string")';
echo explode('"', $a)[1];

Çıktı:

this is my string
0
katma