Играчка-закачка с preg_match_all функцията

Illusion

Registered
Здравейте!

Използвам функцията preg_match_all, за да взема съдържанието между първите две скоби и това между вторите две. Ето пример:
PHP:
"TokenName" "Nqkakuv tekst\ns razlichni 'promenlivi' v nego kato ${tova} naprimer."
Проблемът тук функцията да продължи работата си и да изкара какво има между двете кавички идва от ${tova}.

Функцията ми е:
PHP:
preg_match_all("#.+\"(.+)\".+\"(.+)\"#imsU", $str, $tokens);
Въпросът е как ${text} да не влияе на тази функция и тя да продължи работата си?
 
1.Какви различни неща съдържа текста ти?
2.Кои са тези неща, които не са ти нужни?
3.Кое е това нещо което пречи на функцията да завърши своя цикъл?

Дай конкретен пример с проблема.Как очакваш някой да ти помогне като почти нищо не си обяснил ами говориш с завъртулки.
 
Редактирах мнението си. Надявам се сега да е по-ясно какъв е проблема и как изглежда информацията, която ми трябва.
 
Първо кажи от къде идва тази информация( бази данни ли или нещо друго) и какво се съдържа в това ${text}, ако в него има двойни кавички би могло да не работи така както искаш.За регулярния израз бих казал, че e излишно претрупан за твоята цел - да вземеш съдържанието между двойните кавички, но ще го оправим само дай повече пояснение за самия текст.Най-добре дай примерен пхп код с проблема, защото остават твърде много неизвестни.
 
Няма неизвестни неща… Приеми, че това с кавичките е поставено в променлива и тя се минава с preg_match_all, след което се изкарва съдържанието от първите кавички и вторите на страницата — толкоз. Въпросното ${text} си е точно в този вид, в който го пиша с единствената разлика, че в случая думичката text е различна, но не съдържа каквито и да било други символи освен букви на латиница (content, back, menu, scoreboard и т.н. са другите видове за между къдравите скоби).
 
Напротив има неизвестни и неможем да се разберем.Да направим така: даваш контретен пример при който се появява проблема(php код) и го оправяме със сигурност, съгласен ?
 
"lang"
{
"Language" "English"
"Tokens"
{
"SFUI_SinglePlayer_ModeSelect" "${cancel} Back ${confirm} Select ${dpad} Navigate"
"SFUI_GameModeProgressDisclaimer" "No stats tracking." [$PS3]
// game mode names
"SFUI_GameMode" "MODE" // game mode
}
}
Текста в червено е наред — не ми пречи.
Текста в тъмносин цвят е проблема — има къдрави скоби в него.
Текста в зелен не ми трябва — функцията го игнорира.
Текста в оранжев също не ми трябва — той почва винаги с // и заради това функцията го игнорира.

Няма как по-ясно да ти дам пример за това, което обработва въпросната функция…
 
Ихууу имаме прогрес!Това вече е нещо друго.Значи регулярния израз във функцията ти е пречката няма да изброявам причините, защо не струва(едва ли го интересува някой).Та последно преди да ти дам решение да попитам всички стойности които са в кавички ли ти трябват или определени и ако е второто кои точно от посочения от теб по-горе пример.
 
Интересуват ме нещата от левите и десните кавички.
"SFUI_SinglePlayer_ModeSelect" "${cancel} Back ${confirm} Select ${dpad} Navigate"
"SFUI_GameModeProgressDisclaimer" "No stats tracking." [$PS3]
// game mode names
"SFUI_GameMode" "MODE" // game mode
Игнорирайки всичко останало от текста.
"lang"
{
"Language" "English"
"Tokens"
{
НУЖНИЯ ТЕКСТ
}
}
 
Да разбирам това ?
2.SFUI_SinglePlayer_ModeSelect и ${cancel} Back ${confirm} Select ${dpad} Navigate
3.SFUI_GameModeProgressDisclaimer и No stats tracking.
4.SFUI_GameMode и MODE

И последно този текст повтаря ли се ?

"lang"
{
"Language" "English"
"Tokens"
{
НУЖНИЯ ТЕКСТ
}
}
"lang"
{
"Language" "English"
"Tokens"
{
НУЖНИЯ ТЕКСТ
}
}
и т.н.
 
somebody каза:
Да разбирам това ?
2.SFUI_SinglePlayer_ModeSelect и ${cancel} Back ${confirm} Select ${dpad} Navigate
3.SFUI_GameModeProgressDisclaimer и No stats tracking.
4.SFUI_GameMode и MODE
Да.

somebody каза:
И последно този текст повтаря ли се ?

"lang"
{
"Language" "English"
"Tokens"
{
НУЖНИЯ ТЕКСТ
}
}
"lang"
{
"Language" "English"
"Tokens"
{
НУЖНИЯ ТЕКСТ
}
}
и т.н.
Не.
 
Мхм, ако приемем, че в $string се съдържа нещо като това което си дал като пример ето ти един вариянт :
PHP:
preg_match_all('#"([^"]+?)"\s+"([^"]+?)"#', $string, $tokens);
$limit = count($tokens[0]);
for($i=1;$i<$limit;$i++) {
   echo '<b>'.$tokens[1][$i].'</b> и <b>'.$tokens[2][$i].'</b><br />';
}
*Едитнах израза за да няма проблеми с нови редове в кавичките.
 

Back
Горе