Jump to content
php.lv forumi

Neskaidrības ar preg_match


Slammer

Recommended Posts

Galīgi nejēdzu preg_match funkciju.

Es gribu dabūt datus no html iegūta koda caur fsockopen.

Attiecīgi gribu iegūt datus 18.89, 187.60 GB, 9.93 GB.

 

Šie dati, kā jūs saprotat - mainās.

 

<FONT color=#1900d1>Share Ratio:</FONT><FONT color=#000000>18.89</FONT>

<FONT color=green>Upload:</FONT><FONT color=black>187.60 GB</FONT>

<FONT color=darkred>Download:</FONT> <FONT color=black>9.93 GB</FONT>

 

Gribētos arī uzzināt ko katrs preg_match elements (ja tā var teikt) dara, piem.:

 

>, ^, ?, *, +, @ utml. Kur es to varu apskatīties? It kā iekš php.net neatradu.

 

Paldies.

Link to comment
Share on other sites

Slikti meklēji:

http://lv.php.net/manual/en/ref.pcre.php

http://lv.php.net/manual/en/reference.pcre...n.modifiers.php

http://lv.php.net/manual/en/reference.pcre...tern.syntax.php

 

Tavā gadījumā grūti pateikt, kas līdzēs, jo nevar redzēt visu vajadzīgot tekstu, bet nu sākt vari ar šo te, un pielabot pēc vajadzības:

$all_text = "<FONT .... "; //tavs htmls
 $txt = array("Share Ratio", "Upload", "Download");
 foreach ($txt as $t)
 {
if (preg_match_all("@$t:</FONT>\\s*<FONT color=(?:#0{6}|black)>([^<]+)</FONT>@m", $all_text, $m))
{
  echo $t, "=", $m[1][0], "\n";
}
 }

Link to comment
Share on other sites

Uzreiz laikam vajadzēja dot savādāk.

 

Ir tāds izteiciens:

 

preg_match("/<td class=\"rowhead\">Uploaded<\/td><td align=\"left\">(\d*\.?\d* ..) \(\d*\.?\d* ..\/day\)<\/td>/U",$profile,$matches);

 

Šajās rindās atrod:

 

<TD class=rowhead>Uploaded</TD>
<TD align=left>34.36 GB (98.01 MB/day)</TD></TR>

 

Šajās rindās neatrod:

 

<TD class=rowhead>Upload</TD>
<TD align=left>187.92 GB</TD></TR>

 

Mēģināju mainīt izteicienu uz:

 

preg_match("/<td class=\"rowhead\">Upload<\/td><td align=\"left\">(\d*\.?\d* ..)<\/td>/U",$profile,$matches);

 

Un vienalga neatrod. Noteikti kaut ko nepareizi izmainīju..

Edited by Slammer
Link to comment
Share on other sites

Nesaprotu kāpēc fgan pirmajam preg_match būtu jānostrādā, jo:

1) TD nav tas pats, kas td regexpā

2) htmlā "rowhead" nav pēdiņās, regexpā ir

3) htmlā "left" nav pēdiņās ir

4) starp </TD> pirmajā rindā un <TD> otrajā rindā ir enter, kas nav regexpā

Kur tad nu vēl par otro runāt..

 

Vai tik tu nenodarbojies ar copy&paste, pavisam nesaprotot, ko kas nozīmē?

Link to comment
Share on other sites

1) TD nav tas pats, kas td regexpā

2) htmlā "rowhead" nav pēdiņās, regexpā ir

3) htmlā "left" nav pēdiņās ir

 

Lapas source tika parādīts tieši tāds, pieņemsim, ka es kļūdījos un trekeru sysopi paši no nulles kodē lapas..

 

4) starp </TD> pirmajā rindā un <TD> otrajā rindā ir enter, kas nav regexpā

 

Tagad zināšu ka   likt nedrīkst kur pagadās..

 

Es gribēju zināt tikai vienu - ko nozīmē (\d*\.?\d* ..) latviski?

 

Un te ir mana atbilde:

 

( - start subpattern

 

\d - any decimal digit

 

* - 0 or more quantifier

 

. - match any character except newline (by default)

 

? - extends the meaning of (, also 0 or 1 quantifier, also quantifier minimizer

 

) - end subpattern

 

Negribu vairāk jūs maldināt, tāpēc domāšu pats kas par vainu..

Edited by Slammer
Link to comment
Share on other sites

×
×
  • Create New...