preg_match, addlashes,mb_substr не работает для длинных строк

Я анализирую HTML-файл. У меня есть большая строка, которая в основном сценарий. Строка выглядит так:

var spConfig = new Product.Config ({"outofstock": ["12663"], "instock": ["12654", "12655", "12656", "12657", "12658", "12659", "12660 " "12661","12662","12664","12665"],"атрибуты":{"698":{"ID":"698","код":"aubade_import_colorcode","метка":"ColorCode", "варианты":[{"ID": "650", "метка": "КРАСНЕЕТ", "цена": "0", "продукты":["12654","12655","12656","12657","12658","12659","12660","12661","12662","12663","12664","12665"]}]},"689":{"ID":"689","code":"aubade_import_size_width","label":"Size Width","options":[{"id":"449","label":"85","price":"0","продукты":["12654","12657","12660","12663"]},{"ID":"450","метка":"90","цена": "0", "продукты ":["12655","12658","12661","12664"]},{"идентификатор":"451","метка":"95","цена": "0", "изделия":["12656","12659","12662","12665"]}]},"702":{"id":"702","code":"aubade_import_size_cup","label":"Size Cup","варианты":[{"ID": "1501", "метка": "цена" "А": "0", "продукты":["12654","12655","12656"]},{"ID": "1502", "метка": "В", "цена": "0", "продукты":["12657","12658","12659"]},{"идентификатор":"1503","метка":"C","ПОИ се ":" 0", "продукты":["12660","12661","12662"]},{"ID": "1504", "метка": "D", "цена": "0", "продукты":["12663","12664","12665"]}]}},"шаблон":"\u20aC#{цена}","basePrice":"57","oldPrice":"57","productId":"12666","chooseText":"Choose option...","taxConfig":{"includeTax":true,"showIncludeTax":true,"showBothPrices":false,"defaultTax":19.6 "currentTax":19,6,"inclTaxTitle":"Вкл. Налог "}}); var colorarray = new Array ();

              colorarray["c650"] = 'blush';

    Event.observe('attribute698', 'change', function() {

      var colorId = $('attribute698').value;
      var attribute = 'attribute698';
      var label = colorarray["c"+colorId];

      if ($('attribute698').value != '') {
          setImages(attribute, colorId, label);
        }
    }); //        var currentColorLabel = 'blush'; //        var currentSku = '5010-4-n'; //        var currentPosition = 'v'; // //   

Event.observe (window, 'load', function () {//
setImages ('attribute698', null, currentColorLabel); //});

Мне нужно извлечь содержимое из первого "(" до первого ";". Я попытался извлечь строку и потерпел неудачу. Я попытался preg match у меня не получилось. Пожалуйста, скажите мне какое-нибудь решение моей проблемы. Ниже мое проверенное решение и проблемы.

$strScript =  $tagscript->item(0)->nodeValue;
//this line returns empty string
$str_slashed = addslashes(trim($strScript) );   
$pattern = '/\((.*);/';
preg_match($pattern,$str_slashed,$matches);
echo 'matches'."<br />";
var_dump($matches);

//Add slashes works only if I use it before assignment to other string
$matches = array();
$strScript = addslashes ($tagscript->item(0)->nodeValue);//. "<br />";
$pattern = '/\((.*);/';
preg_match($pattern,$strScript,$matches);
echo 'matches'."<br />";
var_dump($matches);

//str extract method
$posBracket = stripos ($strScript,'(');
 echo $posBracket."<br />";
$posSemiColon = strpos ($strScript,';');
 echo $posSemiColon."<br />";
$temp = mb_substr ($strScript,$posBracket ,($posSemiColon-$posBracket));
echo $temp."<br />";

Приведенный выше код работает для небольших строк

$strScript = "manisha( [is goo girl] {come(will miss u) \and \"play} ; lets go home;";

но не будет работать для длинных строк. Как я могу решить эту проблему? Пожалуйста, помогите мне!

2 ответа

Вы должны добавить многострочный переключатель к своим регулярным выражениям. Пытаться $pattern = '/\((.*);/s'; или же $pattern = '/\((.*);/m';

Попробуйте использовать /\(([^;]*)/ как ваш образец. [^;] означает любой символ, который не является ;,

Редактировать: также включить многострочный режим, как предложено rogers; поэтому весь шаблон должен выглядеть примерно так /\(([^;]*)/s,

Изменить: вы должны знать, что это на самом деле не является ошибкой. Скажи, ты получишь ; внутри некоторого свойства объекта, представление JSON которого включено в вашу строку.

Другие вопросы по тегам