2016-12-21 1 views
0

Ich habe eine TXT-Datei, die mit HTML-Code darin gefüllt ist. Ich versuche, eine PHP-Seite zu erstellen, die den Code sucht und erhält den „username“ für mich:Benötigen Sie Hilfe, Zeichenfolge aus einer Datei in PHP

Hier ist eine kleine Auswahl der Seite:

<div class="search-result-details"> 
    <div class="employee-name">This is my name!</div> 
    <ul class="employee-details"> 
     <li><span class="label">Login</span>username</li> 
     <li><span class="label">Employee ID</span>####</li> 
     <li><span class="label">Barcode ID</span>###</li> 
     <li><span class="label">Status</span>Active</li> 
    </ul> 
    <ul class="org-details"> 
     <li><span class="label">Location</span>SAT1 (755)</li> 
     <li><span class="label">Shift</span>AAAA</li> 
     <li><span class="label">Department</span>1231</li> 
     <li><span class="label">Area</span>26</li> 
     <li><span class="label">Crew</span>0</li> 
     <li><span class="label">Supervisor</span>manager name</li> 
    </ul> 
    </div> 
</a></li> 
        </ol> 
       </div> 

und ich brauche den Benutzernamen greifen die folgende Zeile:

<li><span class="label">Login</span>username</li> 

ich dies bereits, dass zumindest packt die Linie, die ich brauche:

<?php 
$file = 'log.txt'; 
$searchfor = '<ul class="employee-details"> 
     <li><span class="label">Login</span>'; 

// the following line prevents the browser from parsing this as HTML. 
header('Content-Type: text/plain'); 

// get the file contents, assuming the file to be readable (and exist) 
$contents = file_get_contents($file); 
// escape special characters in the query 
$pattern = preg_quote($searchfor, '/'); 
// finalise the regular expression, matching the whole line 
$pattern = "/^.*$pattern.*\$/m"; 
// search, and store all matching occurences in $matches 
if(preg_match_all($pattern, $contents, $matches)){ 
    echo "Found matches:\n"; 
    echo implode("\n", $matches[0]); 
} 
else{ 
    echo "No matches found"; 
} 

?> 

Stromausgang:

<ul class="employee-details"> 
    <li><span class="label">Login</span>username</li> 

Jede Hilfe wird sehr geschätzt. Vielen Dank.

+0

Ich bevorzuge es, HTML-Dateien mit * DOMDocument * und * DOMXpath * zu analysieren. Vielleicht wird es auch dir gehören. – donald123

Antwort

0

Obwohl ein bisschen hacky, ist dies eine Möglichkeit, wie Sie es tun könnten.

$contents = file_get_contents($file); 

preg_match("/(Login<\/span>)([a-zA-Z0-9]*)(<\/li>)/", $contents, $matches); 

if (is_array($matches) && isset($matches[2])) { 
    $username = trim($matches[2]); 
} 

Natürlich müsste diese mittlere Capture-Gruppe alle möglichen Zeichen in Benutzernamen unterstützen.

Beachten Sie auch, dass dies brechen wird, wenn diese HTML-Struktur jemals geändert wird.

Und schließlich, wenn es mehr als einen Benutzernamen in einer Datei gibt, können Sie preg_match_all verwenden und dann $matches[2] wird ein Array von Benutzernamen sein.

0

Mit DOMDocument:

$doc = new DOMDocument(); 
libxml_use_internal_errors(true); 
$doc->loadHTML('<div class="search-result-details"> 
    <div class="employee-name">This is my name!</div> 
    <ul class="employee-details"> 
     <li><span class="label">Login</span>username</li> 
     <li><span class="label">Employee ID</span>####</li> 
     <li><span class="label">Barcode ID</span>###</li> 
     <li><span class="label">Status</span>Active</li> 
    </ul> 
    <ul class="org-details"> 
     <li><span class="label">Location</span>SAT1 (755)</li> 
     <li><span class="label">Shift</span>AAAA</li> 
     <li><span class="label">Department</span>1231</li> 
     <li><span class="label">Area</span>26</li> 
     <li><span class="label">Crew</span>0</li> 
     <li><span class="label">Supervisor</span>manager name</li> 
    </ul> 
    </div> 
</a></li> 
        </ol> 
       </div>'); 
libxml_use_internal_errors(false); 

$html = new DOMXPath($doc); 
$result = ''; 
foreach ($html->query("//*[@class='label']") as $value) { 
    if ($value->textContent == 'Login') { 
     $result = $value->nextSibling->textContent; 
     break; 
    } 
} 

echo $result; 

Output:

username 

Der Grund für libxml_use_internal_errors ist Validierungsfehler zu unterdrücken, wie in this answer skizziert.

+0

Ok also, wie würde ich das tun, indem ich den HTML-Code aus einer Datei lese? – dkeeper09

+0

@ dkeeper09 wie Sie gerade sind, mit 'file_get_contents' –

Verwandte Themen