Проблем с preg_match или някой preg :)

ghostbg

Registered
имам една малка задачка трябва този текст

Код:
S_1_1~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA

да го разделя на масив такаче като му дам print_r($matches6) примерно
да изглежда така
като редовете може да са 100 000 може да са и 20 000
Код:
Array
(
    [0] => Array
        (
            [0] =>S_1_1~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA 
            [1] =>S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA
            [2] => S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA
            [3] => S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA
        )
)

пробвах така:
Код:
preg_match("/S_(.*)+S_/i", $content, $matches6);
и с preg_match_all също но не става и не става изкарва ми го така

Код:
Array
(
    [0] => Array
        (
            [0] =>S_1_1~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA 
S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA 
S_
        )
)

опитах се да се ориентира по "~" но когато го сложа винаги резултата е null дори да го escape-на така "\~"
 
Виш така

Код:
<?
$text="
S_1_1~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA S_1_1_2~ asda 
sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA	
";

$preg=preg_match_all('/S_(.+?)S_/i', $text, $match);

print_r($match);

?>
 
мерси стана с този ? след + НО аз понеже имам 1 000 такива S_1_1_1~ асдАСдАДасдАДасдАСД S_1_1_1~ асдАСдАДасдАДасдАСД | с различни числа само И от 1 000 това ми изкарва 700 реда? Защо така пропуска някой S_ ....
 
lortnoc каза:
preg_match_all('/(S_[0-9\_\~\ ]+[a-z ]+[\s]+?)/i', $s, $matches);
по този начин ми хвана всичките в едно

сега забелязах че с
Код:
/S_([_0-9_]+?~)(.*\s\n)+?S_[0-9]/
това ми вади през едно демек ако вземем за пример долния код ми вади

S_1_1_2_1~ това да
S_1_3_2_5~ това не
S_1_4_2_1~ това да
и т.н

няма как да ти дам кода защото е 45мб текстови файл :)

общо взето е ето това съдържа текстовия файл и аз трябва да взимам съдържанието под всяко S_# и да го записвам в базата

Код:
S_1_1_2_1~
Глава първа<br>ОБЩИ ПОЛОЖЕНИЯ	51353
<A NAME="52944">тесткт; ал. Текст: текст, "тескт"</a>

S_1_3_2_5~
Глава първа<br>ОБЩИ ПОЛОЖЕНИЯ	51354
<A NAME="52944">тесткт; ал. Текст: текст, "тескт"</a>

S_1_4_2_1~
Глава първа<br>ОБЩИ ПОЛОЖЕНИЯ	51355
<A NAME="52944">тесткт; ал. Текст: текст, "тескт"</a>

S_1_4_3_1~
Глава първа<br>ОБЩИ ПОЛОЖЕНИЯ	51356
<A NAME="52944">тесткт; ал. Текст: текст, "тескт"</a>

S_1_4_4_1~
Глава първа<br>ОБЩИ ПОЛОЖЕНИЯ	51359
<A NAME="52944">тесткт; ал. Текст: текст, "тескт"</a>
[/code]
 
Код:
<?
$text="
S_1_1~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA 
S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA 
S_1_1_2~ asdasdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA 
S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA   
";

$preg=preg_match_all('/S_(.+?)S_/s', $text, $match);

print_r($match);

?>
 
Aз ъм го тествал на първия пример:

S_1_1~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA

[a-z ], включва само a-z и space ... ти имаш милиони други знаци
 
Код:
$text="
S_1_1~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA
S_1_1_2~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA
S_1_2_3~ asdasdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA
S_1_1_4~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA
";

$preg=preg_match_all('/S_(.+?)S_/s', $text, $match);

print_r($match);
това вади това
Код:
Array
        (
            [0] => S_1_1~ asda sdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA
S_
            [1] => S_1_2_3~ asdasdAdsAS Dd ASd ASd d ASASd ASDASDA ASd ASDA
S_
        )

@lortnoc извинявай но бях дал по прост пример като си мислех че няма да ми е трудно да сложа една . и * за да брой всички знаци но явно греша щом не става
 
момчета реших си проблема с

$aaa = preg_split("/\nS_/", $content);

пс. ако някой потърси решение на подобен въпрос
 

Back
Горе