powinienem przedmowa tego stwierdzenia, że pracuję z VB6 & RegExpRegExp wyrażenie regularne znaleźć i zastąpić całe słowa jedynie
Ja próbuje znaleźć i zastępować całe słowa, przez „całe słowa” mam na myśli Prawidłowe dopasowanie nie jest podciągiem innego słowa, chociaż niektóre znaki specjalne będą w porządku. Jestem nowicjuszem w wyrażeniach regularnych. To właśnie próbowałem:
([^a-z]+)(Foo)([^a-z]+)
Wydaje się być blisko, ale mam pewne problemy w niektórych sytuacjach.
Na przykład, jeśli znajdę ciąg
Foo Foo
lub
Foo(Foo)
lub gdziekolwiek linia kończy Foo i następujący wiersz zaczyna się od Foo
This is a line with Foo
Foo starts the next line
W dowolnym w tych przypadkach dopasowywany jest tylko pierwszy Foo.
Cóż, może to nie jest problem z meczem, ale raczej moja metoda zamiany. Nie wiem dokładnie, jak mogę to sprawdzić. Używam grupy zastąpić cokolwiek ograniczające char jest dopasowany przez wyrażenie, tak:
regEX.Replace(source, "$1" & newstring & "$3")
Tak w skrócie chcę uniknąć dopasowywania: FooBar barfoo
Każde z poniższych byłby ważny mecze:
Foo Foo Foo Bar
Foo_bar
foo.bar
Foo, bar
Foo (bar)
Foo (Foo)
Jeśli ktoś może łaskawie mi pokazać właściwą drogę do tego bym doceniam to zrobić!
edytowany
Wygląda Rozmawiałem trochę zbyt szybko, co do pierwszego rozwiązania poniżej. Po niewielkich testach i dalszym czytaniu widzę, że podkreślenie jest słowem char, a więc powyższy wzór nie pasuje do niego. Wpadłem na to, co działa, czy jest lepszy sposób?
(\b)(Foo)(\b|_)
regEX.Replace(source, "$1" & newstring & "$3")
Działa, ale wydaje się trochę zaniedbany.
wielkie dzięki. Mam dużo do nauczenia się na temat wyrażeń regularnych. Musiałem wprowadzić niewielką zmianę, ale wydaje się, że udało się to. Po prostu \ bFoo \ b –
Cóż, nie było idealnie. Poprawiłem mój pierwotny post powyżej. Komentarze są mile widziane. Podkreślenie –
jest uważane za "znak słowny", więc '\ b' nie będzie pasować między literą a znakiem podkreślenia. Jednak * jest * sposobem na zrobienie tego. Daj mi znać, jeśli chcesz, żebym ci pokazał – Bohemian