php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Scripts > Apps und PHP Script Gesuche
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


Apps und PHP Script Gesuche Hier könnt ihr nach PHP Skripten und Programmen fragen. Postet eure Wünsche

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 29-11-2008, 21:27
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard Pekka sucht Regex!

In Reguläre Ausdrücke komme ich trotz aller Versuche nicht ordentlich rein. Hat jemand, der sie im Schlaf beherrscht, Lust, mir folgende Aufgabenstellung in einen Regex zu gießen? Wäre sehr dankbar.

Finde aus einem String das erste Vorkommen eines Blocks, der mit

/**

beginnt und mit

*/

endet (ein phpDocumentor-Docblock).
Schneide daraus heraus alles zwischen der Zeichenkette "@desc" und dem nächsten Vorkommen von "@".

Also verbildlicht:

Code:
 /**
  * @desc Dies ist der Teil, den ich per Regex rausschneiden will
  *             und dies
  *             und dies
  * @author dies nicht mehr.
  * @copyright und dies auch nicht.
 */

 /**
  * @desc und dies auch nicht, weil es im zweiten Docblock ist. 
  */
Mit Zitat antworten
  #2 (permalink)  
Alt 29-11-2008, 21:55
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hm, das, was im DocBlock steht, zu matchen ist nicht weiter schwierig:
Code:
/\*.*?@desc([^@]+).*?\*/
(auch wenn der Ausdruck sicherlich keinen Preis gewinnen würde).

Ich habe gerade leider keine Zeit, mit Lookaround zu hantieren, aber vielleicht komme ich morgen oder die Tage dazu. Alternativ könntest du natürlich auch außerhalb des Regulären Ausdrucks ermitteln, ob es sich um das erste Vorkommen eines DocBlock handelt.


Grüße

Geändert von Griecherus (29-11-2008 um 21:57 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 29-11-2008, 22:05
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Das ist schon ein guter Ansatz, vielen Dank!
Jetzt müßte er nur noch entweder beim nächsten @ oder beim nächsten */ (Ende des DocBlock) mit dem Treffer aufhören, dann wäre ich bedient. (Sonst nimmt er noch Teile des nächsten docBlock mit, oder die ganze Datei, wenn es kein @ mehr gibt). Ich probiere auch mal ob ich das hinkriege
Mit Zitat antworten
  #4 (permalink)  
Alt 29-11-2008, 22:07
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Bei mir tut es das auch brav
Code:
Array
(
    [0] => /**
  * @desc Dies ist der Teil, den ich per Regex rausschneiden will
  *             und dies
  *             und dies
  * @author dies nicht mehr.
  * @copyright und dies auch nicht.
 */
    [1] =>  Dies ist der Teil, den ich per Regex rausschneiden will
  *             und dies
  *             und dies
  * 
)
Link zum RegExp-Evaluator

EDIT:
Gut, ich sehe das Problem... Ich schaue mal, ob sich noch etwas zaubern lässt.

Geändert von Griecherus (29-11-2008 um 22:16 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 29-11-2008, 22:17
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Nein, wenn @desc der letzte @-Wert im Block ist, nimmt er den nächsten Block mit:

Link
Mit Zitat antworten
  #6 (permalink)  
Alt 30-11-2008, 00:14
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Was hälst du denn davon, den ersten Docblock aus einer Datei rauszufischen, bevor du die Regex drüberlaufen lässt? So ala
PHP-Code:
$contents file_get_contents($file_name);

$docblock_opening strpos($contents'/*');
$docblock_closing strpos($contents'*/');

if (
$docblock_opening === false ||
    
$docblock_closing === false)
{
    
// ...
}

$block substr($contents$docblock_opening$docblock_closing $docblock_opening); 
. Das in die Regex zu integrieren wird nämlich nicht trivial, befürchte ich (was nicht heisst, dass ich es nicht weiterhin versuche )


Grüße
Mit Zitat antworten
  #7 (permalink)  
Alt 30-11-2008, 00:38
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Code:
#(?<!/\*\*)[^/\*\*]*/\*\*.*?@desc([^@]+).*?\*/#s
Es ließe sich noch so einiges optimieren, aber sollte zumindest schonmal funktionieren

Als Dankeschön lasse ich mich gerne auf ein Bier einladen, solltest du irgendwann mal in Berlin sein

Teste mich

Geändert von Griecherus (30-11-2008 um 01:11 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 30-11-2008, 02:14
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Ich will auch nochmal kurz meinen Senf dazu geben. Konnte das jetzt nicht akzeptieren, dass es da noch nichts gibt und habe was eigenes geschrieben ^^
Klickst du.
Mit Zitat antworten
  #9 (permalink)  
Alt 30-11-2008, 02:19
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Reicht

Code:
#/\*\*.*?@desc([^@|\*/]+)#s
Nicht auch aus?

mfg
Mit Zitat antworten
  #10 (permalink)  
Alt 30-11-2008, 03:13
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Blackgreetz
Reicht

Code:
#/\*\*.*?@desc([^@|\*/]+)#s
Nicht auch aus?

mfg
OffTopic:

Wollt ihr mir etwa mein Bier streitig machen?

Mit Zitat antworten
  #11 (permalink)  
Alt 30-11-2008, 09:10
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Eyyy, coole Sache!
@Griecherus: Das Bier ist dir auf jeden Fall sicher!
Vielen Dank! Ich werde heute mal die beste Lösung einbauen.
Mit Zitat antworten
  #12 (permalink)  
Alt 30-11-2008, 13:24
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Griecherus
OffTopic:

Wollt ihr mir etwa mein Bier streitig machen?

OffTopic:
Damit du nicht leer ausgehst:
Mit Zitat antworten
  #13 (permalink)  
Alt 30-11-2008, 14:25
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Zum Thema passend: PHP-Desaster hat einen kleinen Docblock-Parser geschrieben, der haargenau zu diesem Thema paßt und die Ergebnisse des Regex übernehmen kann:
http://php-resource.de/forum/showthr...threadid=94673
Mit Zitat antworten
  #14 (permalink)  
Alt 01-12-2008, 16:54
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Falls es noch eine Rolle spielen sollte: Hier die Regex nochmal etwas entschlackt:
Code:
~(?<!/\*\*)/\*\*.*?@desc([^@]+|\*/)~s
@Blackgreetz: Dein Muster ist nicht gierig genug
Zitat:
* und dies
* und dies
wird nicht gematcht.

EDIT:

Update



Grüße

Geändert von Griecherus (01-12-2008 um 19:01 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 01-12-2008, 20:40
phpguru42
 Newbie
Links : Onlinestatus : phpguru42 ist offline
Registriert seit: Oct 2008
Beiträge: 71
phpguru42 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Vielleicht noch eine Lösung ohne Reguläre Ausdrücke, um die Doc-Comments rauszufischen:

PHP-Code:
function getDocComments($source)
{
    
$doc_comments = array();
    
    foreach(
token_get_all($source) as $token)
    {
        if(
is_array($token) && $token[0] == T_DOC_COMMENT)
        {
            
$doc_comments[] = $token[1];
        }
    }
    
    return 
$doc_comments;

Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:13 Uhr.