Regex PHP - Получить конкретный текст, включая новые строки и несколько пробелов - PullRequest
0 голосов
/ 01 ноября 2019

Я пытался получить текст, начиная с css: {(некоторый текст ...)} только до конечной скобки, не включая тексты ниже в другом текстовом файле, используя php.

test.sample


just a sample text

css:{

 "css/test.css",
    "css/test2.css"

}

sample:text{

}

Я использую vscode / sublime инструмент поиска и замены для проверки моего синтаксиса регулярных выраженийи нет ничего плохого, я успешно получил нужный текст, включая все новые строки и пробелы внутри, но когда я попытался применить его к php, созданное мной регулярное выражение не работает, он не может найти текст, который я ищуfor.

вот мой код:

myphp.php

$file = file_get_contents("src/page/test.sample");
echo $file . "<br>";
if (preg_match_all("/(css\s*\n*:\s*\n*\{\s*\n*)+((.|\n\S)*|(.|\n\s)*)(\n*)(\}\W)$/", $file)) {
    echo "Success";
} else {
    echo "Failed!";
}

Это мое регулярное выражение, которое я только что создал.

(css \ s * \ n *: \ s * \ n * {\ s * \ n *) + ((. | \ N \ S) | (. | \ N \ s)) (\ n *) (} \ W) $

Пожалуйста, помогите мне, я открыт для любых предложений, я новичок в регулярных выражениях, мне не хватает знаний о логике этого.

спасибо.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Эй, ребята, я нашел решение! основываясь на ответе @ alex

Не знаю, реализую ли я это право.

Вот мой код

$src = "src/page/darwin.al"; //get the source file
      $file = fopen($src,"rb"); //I dont really know what 'rb' means, I guess it simply means, 'not a commong text file'?, search for it!
      $found = false;
      $css = false;
      while($line = fgets($file)){ //read every line of text and assign that line of text in a variable $line

            if(strpos(preg_replace("/\s*/", "", $line), "css:{") === 0){ //if the current line is == 'css:{' <the thing that Im looking for,
                $found = true;
                $css = true;
            }elseif($css && strpos(preg_replace("/\s*/", "", $line),"}") === 0){ //If we are still inside the css block and found the '{'
                echo $line;
                break;
            }

            if ($found) {
                echo preg_replace("/\s*/", "", $line); //remove every whitespace!
            }

      }
      fclose($file);//close the file
0 голосов
/ 01 ноября 2019

Попробуйте это, мой друг:

<?php

$file = "testfile.php"; // call the file

$f = fopen($file, 'rb'); // open the file

$found = false;

while ($line = fgets($f, 1000)) { // read every line of the file

    if ($found) {

       echo $line;

       continue;

    }

    if (strpos($line, "css:") !== FALSE) { // if we found the word 'css:' we print everything after that

      $found = true;

    }

}
...