BG Development


  Reply to this topicStart new topicStart Poll

> Малко помощ за REGEX
nullsoft
Публикувано на: 30-03-2021, 18:29
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 107
Регистриран на: 23.06.05



Имам следния код

CODE
preg_match_all('#<div class="quizAnswerContainer">\s(.*?)<div class="quizStatsContainer">#smi', $get, $go);



print_r($go[1])

показва следния код

CODE


Array
(
   [0] =>            
                 <div class="quizSingleAnswer quizAnswerRow_1  answerGiven answerIncorrect" onclick="quizFunc.quizQuestionToggleAnswer('1');">
                   
                   <div class="quizAnswerPosition">A</div>
                   <div class="quizAnswerText">
                     In Kanada
                       
                         <div class="quizAnswerIconOuter"><div class="quizAnswerIcon"><img src="https://s3-eu-west-1.amazonaws.com/pocket-s3/portal_quiz/wrong_white.png"/></div></div>
                       
                   </div>
                 </div>
                 <div class="quizSingleAnswer quizAnswerRow_2  " onclick="quizFunc.quizQuestionToggleAnswer('2');">
                   
                   <div class="quizAnswerPosition">B</div>
                   <div class="quizAnswerText">
                     In Algerien
                       
                   </div>
                 </div>
                 <div class="quizSingleAnswer quizAnswerRow_3  answerNotGiven answerCorrect" onclick="quizFunc.quizQuestionToggleAnswer('3');">
                   
                   <div class="quizAnswerPosition">C</div>
                   <div class="quizAnswerText">
                     In Russland
                       
                         <div class="quizAnswerIconOuter"><div class="quizAnswerIcon"><img src="https://s3-eu-west-1.amazonaws.com/pocket-s3/portal_quiz/right_green.png"/></div></div>
                       
                   </div>
                 </div>
                 <div class="quizSingleAnswer quizAnswerRow_4 quizLastAnswer " onclick="quizFunc.quizQuestionToggleAnswer('4');">
                   
                   <div class="quizAnswerPosition">D</div>
                   <div class="quizAnswerText">
                     In Indien
                       
                   </div>
                 </div>
         </div>
       </div>
     </div>

     
)


искам да взема само текста In Russland

кадето се намира ето в тоз код
CODE

<div class="quizAnswerText">
                     In Russland
                       
                         <div class="quizAnswerIconOuter"><div class="quizAnswerIcon"><img src="https://s3-eu-west-1.amazonaws.com/pocket-s3/portal_quiz/right_green.png"/></div>


не мога да взема този текст

PMEmail Poster
Top
Антон Яначков
Публикувано на: 30-03-2021, 20:22
Quote Post



Име: Антон Яначков
Група: Потребител
Ранг: Почетен член

Мнения: 2245
Регистриран на: 27.07.16



За да изолираш само този текст, ти трябва нещо уникално, което да го отличава от останалия. Това което виждам е, буквата С и за това аз бих извадил всичко което започва от нея включително търсения текст и завършва с <, чрез следния регулярен израз:

CODE

/C</div>\n\s+<div class=\"quizAnswerText\">\n[\n\s\w\.\,\?\!\;\:]+/g


След, което, чрез Replace бих заместил ненужния, но известен текст
C</div><div class="quizAnswerText"> с нищо и ще ти остане само търсения текст.
Можеш лесно да видиш как се случват нещата на този адрес:
https://regexr.com
Слагаш си своя текст, слагаш регулярния израз и виждаш какво ти е селектирано. Там е лесно и удобно за експерименти.

Регулярния израз трябва още малко да се пипне, ако в текста ще има някакви особени знаци или символи, примерно @ или нещо друго, но това лесно можеш да си го добавиш в правоъгълните скоби.




PMEmail PosterUsers Website
Top
nullsoft
Публикувано на: 30-03-2021, 20:33
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 107
Регистриран на: 23.06.05



QUOTE (Антон Яначков @ 30-03-2021, 20:22)
За да изолираш само този текст, ти трябва нещо уникално, което да го отличава от останалия. Това което виждам е, буквата С и за това аз бих извадил всичко което започва от нея включително търсения текст и завършва с <, чрез следния регулярен израз:

CODE

/C</div>\n\s+<div class=\"quizAnswerText\">\n[\n\s\w\.\,\?\!\;\:]+/g


След, което, чрез Replace бих заместил ненужния, но известен текст
C</div><div class="quizAnswerText"> с нищо и ще ти остане само търсения текст.
Можеш лесно да видиш как се случват нещата на този адрес:
https://regexr.com
Слагаш си своя текст, слагаш регулярния израз и виждаш какво ти е селектирано. Там е лесно и удобно за експерименти.

Регулярния израз трябва още малко да се пипне, ако в текста ще има някакви особени знаци или символи, примерно @ или нещо друго, но това лесно можеш да си го добавиш в правоъгълните скоби.


за момента е С но после може да е А Б и Д.

само това го отличава от другите

CODE
<img src="https://s3-eu-west-1.amazonaws.com/pocket-s3/portal_quiz/right_green.png"/>


всеки правилен отговор получава
CODE
https://s3-eu-west-1.amazonaws.com/pocket-s3/portal_quiz/right_green.png



аз пробшам по следния начин

CODE
preg_match_all('#<div class="quizAnswerContainer">\s(.*?) <div class="quizAnswerIconOuter"><div class="quizAnswerIcon"><img src="https:\/\/s3-eu-west-1.amazonaws.com\/pocket-s3\/portal_quiz\/right_green.png"\/>#smi', $get[1][0], $clean);


print_r($clean);

е празен

провах с

$clean = explode('<div class="quizAnswerText">', $go[1][0]);

при $clean[4] ми показва In Russland

пробвам с if preg_match да видя дали има right_green.png в array дава ми true но после не ми стигат пхп знанията как да искарам от коя цифра се получава true



Това мнение е било редактирано от nullsoft на 30-03-2021, 20:39
PMEmail Poster
Top
nullsoft
Публикувано на: 30-03-2021, 21:46
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 107
Регистриран на: 23.06.05



успях по следния начин

CODE
$clean = explode('<div class="quizAnswerText">', $go);


for ($i = 0; $i < 4; $i++) {


if (preg_match("/right_green.png/", $clean[$i])) {


preg_match('#(.*?)<div#smi', $clean[$i], $g);

print_r($g[0]);
}



}


PMEmail Poster
Top
relax4o
Публикувано на: 31-03-2021, 01:53
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2606
Регистриран на: 04.04.07





--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
thrawn
Публикувано на: 31-03-2021, 05:17
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3119
Регистриран на: 17.01.17



Html се парсване с dom парсер (който позволява директна манипулация на DOM) вместо с регулярни изрази.
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0