get tekst tussen char.

Status
Niet open voor verdere reacties.

ecross

Gebruiker
Lid geworden
4 mrt 2009
Berichten
638
hallo,

ik ben verder aan het bouwen in mijn eigen zoek machine en nu wil ik en stukje maken die zoek naar alt's in links op 1 pagina, ik heb het volgende stuk code, maar die haalt alleen het 1e resultaat op.
PHP:
function GetBetween($content,$start,$end){
   $r = explode($start, $content);
   if (isset($r[1])){
  $r = explode($end, $r[1]);
	return $r;
	}
  return '';
}
$content = implode("", file("scripts.php"));  // dit werkt
$start = "alt='";
$end = "'";
$r =  GetBetween($content, $start, $end);
echo $r;
je kan voor test ook even $content vervangen voor zoiets:
<a href='page1.php' alt='pagina 1'>pagina 1</a>tekst tekst
<a href='page2.php' alt='pagina 2'>pagina 2 </a>

en dan wil ik dat er zoiets uit komt:
array
(
[0] => pagina 1
[1] => pagina 2
)
 
Zo gaat het wel heel ingewikkeld.
Je kan beter eens kijken naar de functie
PHP:
preg_match_all
en dan met een reguliere expressie de juiste gegevens eruit halen
hier vind je meer over reguliere expressies:
http://www.evolt.org/node/22700
 
bedankt voor de reactie

ik heb nu dit:
PHP:
$str = "alt='tekst tekst' alt='alt tekst2'";

preg_match_all("/alt='?[a-z\s]+'/", $str, $matches);
print_r($matches);

alleen hij pakt weer de 2e alt tekst niet die uitkomst is namelijk
Array
(
[0] => Array
(
[0] => alt='tekst tekst'
)

)

inplaats van:
Array
(
[0] => Array
(
[0] => alt='tekst tekst'
[1] => alt='alt tekst2'
)

)
en ik wil liever alleen de alt tekst zelf (zonder alt=' er voor)
 
PHP:
$str = "alt='tekst tekst' alt='alt tekst2'";
 
preg_match_all("/alt='?[a-z0-9\s]+'/", $str, $matches);
print_r($matches);
probeer bovenstaand eens. je had alleen letters en geen nummers dut de tweede alt vond hij niet.
Ik kijk nog even om de alt weg te laten.
 
dit moet het zijn:
PHP:
$str = "alt='tekst tekst' alt='alt tekst2'";
 
preg_match_all("/alt='?([a-z0-9\s]+)'/", $str, $matches);
print_r($matches[1]);

door in de regex iets tussen () te plaatsen wijs je dat toe in de array aan [0], [1] etc.
hij leest het van links naar rechts. dus eerst komt alles wat overeenkomt in matches[0].
daarna komt hetgeen wat overeenkomt tussen de eerste () in matches[1] etc.
 
ik wil het nu maken en ik bedenk me dat ik ook de href nodig heb,
die moet dan op een of andere manier gekoppeld zijn aan de alt,

weet je ook hoe dat kan?
 
K heb t nog niet helemaal.
PHP:
preg_match_all("/href='(http:\/\/[a-z0-9]+\.[a-z]+)'.*(title='?[a-z0-9\s]+')>/", $str, $matches);

Kom er nu even niet meer uit. wellicht morgen meer tijd.
kijk anders of je bovenstaand verder kunt uitwerken

overigens werkt deze wel
PHP:
preg_match_all("/href='(http:\/\/[a-z0-9]+\.[a-z]+)' (title='?[a-z0-9\s]+')>/", $str, $matches);
maar als er nu iets tussen de href en de title staat werkt het niet en dat kan uiteraard gebeuren. Je moet hier nu maar even verder mee borduren,
Overigens nog een opmerking, voor een link moet je title= gebruiken ipv alt= . alt is voor een afbeelding.
 
Laatst bewerkt:
ik heb de alt aangepast naar title alleen het werkt niet.
ik heb het volgende script:
PHP:
$str = implode("", file("scripts.php"));
	preg_match_all("/href='(http:\/\/[a-z0-9]+\.[a-z]+)' (title='?[a-z0-9\s]+')>/", $str, $matches);
	print_r($matches);
	if(isset($matches[1][0])){
		foreach($matches[1] as $key => $value)
                {
                     echo $key . ': '.$value;
                }
		}
	else 
		{
		echo "<p><b>er zijn geen hits op deze zoek term</b></p>";
		}
en daarmee krijg ik de volgende output:
Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) )

er zijn geen hits op deze zoek term
 
Laatst bewerkt:
nog even voor de duidelijkheid, dit werkt ook niet:
PHP:
$str = "<a href='http://www.ecross.nl/link.php' title='titel1'>tekst 1</a>";
preg_match_all("/href='(http:\/\/[a-z0-9]+\.[a-z]+)' (title='?[a-z0-9\s]+')>/", $str, $matches);
print_r($matches);

output:
Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) )
 
ja, zoek een andere oplossing

Ik zal ook uitleggen waarom: de alt tag is weliswaar opgenomen in de diverse (x)html standaarden, maar niet alle websites gebruiken hem. Andere tags zoals title, style, width, height, id kunnen wel of niet voorkomen in alt en href tags. Bovendien staat de volgorde van de gebruikte tags niet vast: iemand kan het op de klassieke manier doen met
HTML:
<a href='hoi.htm'><img src='hoi.jpg' alt='hoi'></a>
terwijl op een andere website iets staat als
HTML:
<a rel="nofollow" href="hoi.htm"><img title="hoi" alt="hoi" src="hoi.jpg"></a>
Het is niet mogelijk om met alle tags en de wisselende volgorde rekening te houden.

Alleen als je een specifieke website wilt scannen op tags èn het tag gebruik op die site voldoet aan een bepaalde standaard kun je een regex methode maken en toepassen.

Misschien kun je een meer klassieke methode gebruiken en simpelweg de sites/paginas inlezen, de tags verwijderen, en alle woorden in de database zetten zodat je daarna met een "like" query aan de gang kunt?
 
Alleen als je een specifieke website wilt scannen op tags èn het tag gebruik op die site voldoet aan een bepaalde standaard kun je een regex methode maken en toepassen
komt dat even mooi uit :) het was bedoeld voor mijn eigen website, in 1 specefieke pagina, het is me al gelukt om de paginabron optehalen maar het lukt me niet om de href's en title's eruit te halen (ze moeten wel bij elkaar gekoppeld zijn zodat je kunt zien welke href er bij welke title hoord).

zo zien mijn links eruit:
HTML:
<a href='hier de href' title='hier de titel'>hier de tekst</a> hier nog meer uitleg over de link<br>
<a href='hier 2e href' title='hier de 2e titel'> hier tekst</a> hier nog wat uitleg over link 2<br>
ik wil dus de href en de title, als het niet te moeilijk is: kun je dan ook de uitleg (na de link) ophalen tot de volgende <br>?

nog even voor de duidelijkheid; zo wil ik dat de output er ongeveer uit ziet:
HTML:
array (0 => array('href' => 'hier de href',
                         'title' => 'hier de titel',
                         'uitleg' => 'hier evt. de uitleg'
                         )
         1 => array( etc.....
                        )
        )
 
Ok, het gaat dus om de title bij een href en niet om een alt (bij een img). Dat maakt het al een stuk eenvoudiger. Heb je hier iets aan?
PHP:
<pre>
<?php
	$var = "<a href='hier de href' title='hier de titel'>hier de tekst</a> hier nog meer uitleg over de link<br>
			<a href='hier 2e href' title='hier de 2e titel'> hier tekst</a> hier nog wat uitleg over link 2<br>";
	preg_match_all ("/<a href=\'+(.*?)\'+.*? title=\'+(.*?)\'+.*?>(.*)<\/a>/", $var, &$data);
	echo htmlspecialchars(print_r($data,true));
?>
</pre>
Nu de data in een array staat kun je het verder bewerken.
 
zo is hij ook prima,
bedankt,

oh, ik zie nog wat: ik bedoelde bij de laatste key (in dit voorbeeld: "hier de tekst") niet de tekst die tussen <a ...> en </a> staat aar de tekst die tussen </a> en <br> staat, dus de zin erachter. de tekst tussen <a> en </a> is namelijk vrijwel gelijk aan de title.

dit is me immidels gelukt, nog bedankt
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan