Sven Schmidt: RegEx search and Replace

Tag zusammen,

habe ein kleines Regex-Prob.

Mein Regex lautet so:

^.+[^,-!\s]pDhMc

Ich möchte vollgendes erreichen:
In einer beliebigen Zeile soll die Zeichenfolge pDhMc gesucht werden, von dort aus soll nach links jedes Zeichen welches nicht ein Leerzeichen, ein Komma, ein Rufzeichen oder ein Minus ist bis max. zum Zeilenanfang ebenfalls gesucht werden.

Dies soll ein Search und Replace mit Powergrep ermöglichen.

Nun kommen bei mir aber vollgende Ergebnisse:
Beispiele:

if(!pDH->pDhMc    // Warum steht hier ein Minus und ein Rufzeichen

oder:

CPO_DH *pChPo = CDhMcConnector::pDhMc // Warum die Leerzeichen?

Hoffe ich habe es verständlich beschreiben können.

Bin in diesem Bereich noch Anfänger und würde mich über Hilfe freuen!

MFg

  1. Hi,

    ^.+[^,-!\s]pDhMc
    In einer beliebigen Zeile soll die Zeichenfolge pDhMc gesucht werden, von dort aus soll nach links jedes Zeichen welches nicht ein Leerzeichen, ein Komma, ein Rufzeichen oder ein Minus ist

    statt dessen hast Du alle Zeichen ausgeschlossen, die Whitespace oder Komma bis Ausrufezeichen sind. Innerhalb einer Zeichenklasse ist das Minus ein Sonderzeichen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Hallo,

    Mein Regex lautet so:

    ^.+[^,-!\s]pDhMc

    ok. Daß das "-" innerhalb einer Zeichenklassendefinition eine besondere Bedeutung hat, weißt Du ja, oder?

    if(!pDH->pDhMc    // Warum steht hier ein Minus und ein Rufzeichen

    Weil der RegExp paßt:
    if(!pDH-      =  .+

    =  [^,-!\s]

    pDhMc         =  pDhMc
    ;)

    CPO_DH *pChPo = CDhMcConnector::pDhMc // Warum die Leerzeichen?

    Dito:
    CPO_DH *pChPo = CDhMcConnector:    =    .+
    :                                  =    [^,-!\s]
    pDhMc                              =    pDhMc

    Tip: laß mal das .+ weg und korrigiere die Zeichenklassendefinition (Stichwort "-").

    Ciao,
    Andreas

    --
    "Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)
    1. Vielen Dank für die Antworten!
      Habe es jetzt, vor allem habe ich wieder etwas gelernt :-)

      Nun noch eine Frage:

      gesucht wird  Abcdef, wenn dies in einer Zeile gefunden wird soll ein // an den Zeilenanfang geschrieben werden. Der Rest der Zeile soll aber unberührt bleiben.

      Eine Idee? Wie gesagt, ich lerne noch.
      Danke für das Verständnis!

      Gruß

      Svenfranzisko

      1. gesucht wird  Abcdef, wenn dies in einer Zeile gefunden wird soll ein // an den Zeilenanfang geschrieben werden. Der Rest der Zeile soll aber unberührt bleiben.

        Svenfranzisko,
        Du suchst nach
        dem Zeilenanfang /^/
        gefolgt von beliebig vielen Zeichen, merken in $1 /(.*)/
        dann /(Abcdef)/, merken in $2
        und nochmals beliebig viele Zeichen /(.*)/, merken in $3
        bis zum Zeilenende /$/

        Das ersetzt du durch //$1$2$3

        Live long and prosper,
        Gunnar

        --
        „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
        1. und nochmals beliebig viele Zeichen /(.*)/, merken in $3
          bis zum Zeilenende /$/

          Heute ist wohl mein Ingrid-Tag. ;-)

          Das Suchen nach den Zeichen hinter "Abcdef" ist nicht nötig.

          Live long and prosper,
          Gunnar

          --
          „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
        2. dem Zeilenanfang /^/
          gefolgt von beliebig vielen Zeichen, merken in $1 /(.*)/
          dann /(Abcdef)/, merken in $2
          und nochmals beliebig viele Zeichen /(.*)/, merken in $3
          bis zum Zeilenende /$/

          Das ersetzt du durch //$1$2$3

          Hallo Gunnar,

          habe dank deiner Hilfe die Lösung gefunden, allerdungs sieht diese bei Powergrep etwas anders aus:

          searchbox:
          ^(.*)(mat)

          Replacebox:
          //\u0

          Vielen Dank für den Tipp!!

          Gruß Svenfranzisko