Regex: dize ortasında kaçtı alıntı eşleştirerek maç dizesini bozmadan Eşleştirme dizeleri

0 Cevap php

Ben bir şablon ifadesi olmadığını dan conditionals dışarı eşleşen ediyorum. Sorun bireysel koşulları bulunuyor içine koşullu deyimi parçaladıktan önce dizeleri ayrıştırma ile yatıyor.

Ben koşullarının dağılmasından önce tutucular ile dize koşulları yerine gidiyorum böylece dizeleri kırmak kadar desen eşleştirme ile karışmaz.

Aşağıdaki kod işi gayet iyi gelmez.

// remove quoted strings from conditional elements as will conditional tokenising below
if (preg_match_all('/([\"\'])([^\\1]*?)\\1/s', $conditions, $string_matches))
{   
    $uid = uniqid(time().'_');
    $strings = array(
            'id' => $uid, 
            'matches' => array()
        ); 
    $replacements = array();
    foreach($string_matches[0] as $key=>$match)
    {
        $match_id = '#'.$uid.md5($match);
        $replacements[$match] = $match_id;
        $strings['matches'][$match_id] = array(
                'match' => $match,
                'content' => $string_matches[2][$key],
            );
    }
    $conditions = str_replace(array_keys($replacements), array_values($replacements), $conditions);
}

Bu büyük aşağıdaki maçları

boolean_arg1 && arg2 !== 'testing multi quotes' && arg3 === "test & yup" -or-
boolean_arg1 && arg2 !== 'testing "multi" quotes' && arg3 === "test & yup"

bana veriyorsun

boolean_arg1 && arg2 !== #1292059008_4d0341809c0f74062e5ac5086fb24f8e8383a137a5a5e && arg3 === #1292059008_4d0341809c0f7d4820850f1f6e06677e741be556352e3
boolean_arg1 && arg2 !== #1292059102_4d0341de3f5196213c34e77a2cfbb11f867f9ed57c85f && arg3 === #1292059102_4d0341de3f519d4820850f1f6e06677e741be556352e3

Ancak tanıtan, dizeye tırnak kaçtı kaçtı dizge desen maç kırar.

boolean_arg1 && arg2 !== 'testing "multi" \'quotes' && arg3 === "test && yup"

verir

boolean_arg1 && arg2 !== #1292059161_4d03421974c3166a7cae87ddc1002905892eff6453bd4quotes' && arg3 === #1292059161_4d03421974c31d4820850f1f6e06677e741be556352e3

Ilk değişiminden sonra (Notice 'tırnak).

Ben aramaları ve benzeri yapıyor çok iyi değilim. Dönüştürmek için basit bir çözüm onlara kaçan tırnak ile tam dizeleri maçları birine yukarıdaki kod regex olup olmadığını merak ediyorum?

0 Cevap