Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

RegEx - Klein- und Großschreibung spielt keine Rolle

Frage Entwicklung

Mitglied: Dani

Dani (Level 5) - Jetzt verbinden

25.07.2008, aktualisiert 25.08.2008, 10579 Aufrufe, 25 Kommentare

Hallo zusammen,

ich brauche für ein kl. Projekt einen Regular Expression. Der Ausdruck soll prüfen, ob ein bestimmes Wort in einer Zeile vorkommt. Dabei soll die Position des Wortes in dieser Zeile, Groß- & Kleinschreibung dieses Wortes keine Rolle spielen.

Beispielzeile:
01.
Das ist dein Strohhut
Nun ist aber das Wort Strohhut verboten - egal wie geschrieben:
01.
Strohhut 
02.
strohhut 
03.
sTROhhut 
04.
....
Ich bring's einfach nicht auf die Reihe.


Gruss,
Dani
Mitglied: 67369
25.07.2008 um 15:19 Uhr
find /i oder findstr /i benutzen. /i ignoriert die Groß-/Kleinschrift.

Wenn du das in einer Programmiersprache verwendest, vorher den String zur Prüfung umwandeln mit AnsiUppercase() oder AnsiLowercase(), ganz nach Vorliebe.
Bitte warten ..
Mitglied: bastla
25.07.2008 um 15:22 Uhr
Hallo Dani!

Je nach der Software, die Du verwendest, sollte es einen "IgnoreCase"-Schalter geben - oder auch nicht. In letzterem Falle bliebe immer noch (unschön, aber effektiv):
01.
[Ss][Tt][Rr][Oo][Hh][Hh][Uu][Tt]
Grüße
bastla
Bitte warten ..
Mitglied: Dani
25.07.2008 um 15:28 Uhr
Hi BauerHick,
leider gibt es in dieser Sprache kein "find", "findstr", etc....das Modul ist fertig geliefert. Ich kann eben über eine Textdatei angeben, was gesperrt sein muss.

Die Doku dazu ist eben ziemlich schlecht!


Gruss,
Dani
Bitte warten ..
Mitglied: Dani
25.07.2008 um 15:29 Uhr
Hi bastla,
hmm...sprich es würde nachher eigentlich so aussehen:
01.
^.*[Ss][Tt][Rr][Oo][Hh][Hh][Uu][Tt].*$
"ignore" meine ich zu wissen, dass /i bei RegEx der passende Schalter ist.


Gruss,
Schakal
Bitte warten ..
Mitglied: bastla
25.07.2008 um 15:49 Uhr
Hallo Dani!

Welchen Vorteil siehst Du bei Deiner Schreibweise? Da Du beliebige Zeichen vor und nach dem Suchbegriff zulässt ergibt sich daraus keine Einschränkung, und falls der Suchbegriff auf zwei (oder mehr) Zeilen verteilt wäre, sollte er durch das enthaltene Zeilenendezeichen (egal, ob Chr(10) oder Chr(13) oder beides) ohnehin nicht gefunden werden.

Wenn Du andererseits erreichen wolltest, dass der Suchbegriff nur als einzelnes Wort gefunden wird, müsstest Du ihn mit "\b" eingrenzen.

Grüße
bastla

[Edit] Wenn allerdings das Ziel ist, die gesamte Zeile als Ergebnis zu erhalten, dann sehe ich den Sinn in Deiner Version inzwischen auch. [/Edit]
Bitte warten ..
Mitglied: Dani
25.07.2008 um 16:50 Uhr
Hi bastle,
oh man..was schreibe ich da nur. Ich bin total am Ende mit Nerven, Körperlich und mit der Konzentration.

Also ich möchte eigentlich nur feststellen, ob der Namen "Strohhut" in dieser Zeile vorkommt - egal, wie geschrieben und an welcher Position in der Zeile.

Ich hoffe, ich habs diesmal richtig geschrieben...


Gruss,
Dani
Bitte warten ..
Mitglied: bastla
25.07.2008 um 18:29 Uhr
Hallo Dani!

... nur feststellen, ob der Namen "Strohhut" in dieser Zeile vorkommt ...
Wenn von Deiner Software zeilenweise überprüft wird, sollte mein erster Vorschlag genügen ...

Grüße
bastla
Bitte warten ..
Mitglied: Dani
25.07.2008 um 19:21 Uhr
G' Abend,
funktioniert....ähm, du hast grad nicht n VBScript zur Hand wo ich das Wort eingebe kann und danach die Kombi ausgibt.


Gruss,
Dani
Bitte warten ..
Mitglied: bastla
25.07.2008 um 19:34 Uhr
Hallo Dani!

Wie das Leben so spielt - grade hatte ich mir gedacht, vor dem Abendessen könnte ich doch vielleicht noch ein kleines Script ...
01.
If WScript.Arguments.Count > 0 Then 
02.
	Wort = WScript.Arguments(0) 
03.
Else 
04.
	WScript.Echo "Bitte mit Suchwort als Parameter aufrufen!" 
05.
	WScript.Quit 
06.
End If 
07.
 
08.
Wort = UCase(Wort) 
09.
 
10.
Pattern = "" 
11.
For i = 1 To Len(Wort) 
12.
	CharU = Mid(Wort, i, 1) 
13.
	If CharU >= "A" And CharU <= "Z" Or CharU = "Ä" Or CharU = "Ö" Or CharU = "Ü" Then 
14.
	Pattern = Pattern & "[" & CharU & LCase(CharU) & "]" 
15.
	Else 
16.
		Pattern = Pattern & CharU 
17.
	End If 
18.
Next 
19.
WScript.Echo Pattern
Wenn Du mit
01.
cscript "Scriptname.vbs" "strohhut"
in der Konsole startest, wird hoffentlich etwas Vernünftiges, Kopierfähiges herauskommen ...

Mahlzeit
bastla

[Edit] Kleine Anpassung: Wenn es keine Groß-/Kleinschreibung gibt (Ziffern, etc) genügt auch die Angabe des Zeichens selbst. [/Edit]
Bitte warten ..
Mitglied: Dani
25.07.2008 um 20:41 Uhr
Abend bastla,
ich habe das Ganze noch ein bisschen angepasst. Denn es muss ein normaler MA bedienen können:
01.
Wort = Inputbox("Bitte Wort eingeben:", "Abfrage", "") 
02.
If Wort = "" then  
03.
	WScript.Quit 
04.
Else 
05.
	Wort = UCase(Wort) 
06.
	 
07.
	Pattern = "" 
08.
	For i = 1 To Len(Wort) 
09.
		CharU = Mid(Wort, i, 1) 
10.
		If CharU >= "A" And CharU <= "Z" Or CharU = "Ä" Or CharU = "Ö" Or CharU = "Ü" Then 
11.
			CharL = LCase(CharU) 
12.
		Else 
13.
			CharL = CharU 
14.
		End If 
15.
		Pattern = Pattern & "[" & CharU & CharL & "]" 
16.
	Next 
17.
 
18.
	erg = Inputbox("Ergebnis:", "Ergebnis", Pattern) 
19.
End If 
20.
 
21.
WScript.Quit
Wenn man das noch anders lösen kann, lass ich mich gerne belehren.

Wichtig ist eben, das Copy & Paste am Ende.


Gruss,
Dani
Bitte warten ..
Mitglied: bastla
25.07.2008 um 20:47 Uhr
Hallo Dani!

Wenn man das noch anders lösen kann, lass ich mich gerne belehren.
Wenn's denn nicht die Konsole sein darf (dort könnte man/frau noch den Aufruf der "clip.exe" - zB von einem Server 2003 "geborgt" - dranhängen), passt die Lösung so - der Weg aus einem (mit WScript gestarteten) VBScript in die Zwischenablage ist etwas holprig.
Ich würde aber trotzdem zu meiner angepassten Version raten - ist etwas "schöner" ...

Grüße
bastla
Bitte warten ..
Mitglied: Dani
25.07.2008 um 20:57 Uhr
Hi bastla,
ok, die clip.exe habe ich, wie wo was muss ich jetzt wo einbauen. Hör die Anwendung heute 1. Mal.

Es muss eben echt einfach zukopieren und easy bedienbar sein!


Gruss,
Dani
Bitte warten ..
Mitglied: Biber
25.07.2008 um 21:40 Uhr
Nein Dani,

<OT>
ok, die clip.exe habe ich, wie wo was muss ich jetzt wo einbauen.
Hör die Anwendung heute 1. Mal.
.... es ist kein Musikclip, den Du da heruntergeladen hast...
...und nein, reinhören bringt auch keine neuen Erkenntnisse.

Geht mich ja nichts an, aber willst Du vor so schwierigen Sachen nicht erstmal 'ne Runde ausschlafen?
</OT>

SCNR
Biber
Bitte warten ..
Mitglied: Dani
25.07.2008 um 21:51 Uhr
Hi Biberchen,
ausschlafen ist recht und gut, aber die Zeit habe ich nicht...bin schon froh wenn es 2-3 Stunden / Tag sind.

Ich muss morgen Früh in Testphase gehen...sprich es sind ca. 100 MA die betroffen. Wenn das vollbracht ist bis morgen früh um 7 Uhr, kann ich schlafen gehen. Damit ich am Sonntag weiterfliegen kann nach Bonn.

Sry, Jungs...aber hab's echt eilig.


Gruss,
Dani
Bitte warten ..
Mitglied: bastla
25.07.2008 um 21:58 Uhr
Hallo Dani!

Dann mach ich's kurz :
01.
@echo off & setlocal 
02.
set /p "Wort=Bitte Wort eingeben: " 
03.
if "%Wort%" neq "" cscript "Scriptname.vbs" "%Wort%"|C:\Scripts\clip.exe
Grüße
bastla
Bitte warten ..
Mitglied: Dani
25.07.2008 um 22:14 Uhr
Hi bastla,
du bist ein Schatz....das sieht doch sehr gut aus. Jetzt weiß ich auch wieder das clip.exe die Zwischenablage ist.

Gibts noch ne Möglichkeit noch die paar Zeilen darüber wegzubekommen?


Gruss,
Dani
Bitte warten ..
Mitglied: bastla
25.07.2008 um 22:25 Uhr
Hallo Dani!

Sorry - hatte noch die Variante "Parameterübergabe" im Kopf ...

Wenn Du die Version mit InputBox verwendest, dann nur:
01.
@cscript "Scriptname.vbs"|C:\Scripts\clip.exe
Grüße
bastla
Bitte warten ..
Mitglied: Dani
25.07.2008 um 23:24 Uhr
Jetzt blick ichs gar nicht mehr....
Einer von uns beiden hat den Code jetzt durcheinander gebracht - ich wars.


Gruss,
Dani
Bitte warten ..
Mitglied: bastla
25.07.2008 um 23:30 Uhr
Hallo Dani!

Nimm diese Script-Version (dann hast Du alle Möglichkeiten) und die obige Batchzeile:
01.
If WScript.Arguments.Count > 0 Then 
02.
	Wort = WScript.Arguments(0) 
03.
Else 
04.
	Wort = InputBox("Bitte Wort eingeben:", "Abfrage") 
05.
	If Wort = "" Then WScript.Quit 
06.
End If 
07.
 
08.
Wort = UCase(Wort) 
09.
 
10.
Pattern = "" 
11.
For i = 1 To Len(Wort) 
12.
	CharU = Mid(Wort, i, 1) 
13.
	If CharU >= "A" And CharU <= "Z" Or CharU = "Ä" Or CharU = "Ö" Or CharU = "Ü" Then 
14.
	Pattern = Pattern & "[" & CharU & LCase(CharU) & "]" 
15.
	Else 
16.
		Pattern = Pattern & CharU 
17.
	End If 
18.
Next 
19.
WScript.Echo Pattern
Grüße
bastla
Bitte warten ..
Mitglied: Dani
25.07.2008 um 23:46 Uhr
Hi bastla,
werde ich wohl machen....mehr bleibt mir grad nicht übrig. Ich sollte seit ner 1 Stunde schon das nächste Step konfiguieren..

Vielen Dank für deine schnelle Hilfe und Geduld.


Gruss,
Dani
Bitte warten ..
Mitglied: Dani
25.08.2008 um 17:23 Uhr
Hi bastla,
die Groß-Kleinschreibung wird sauber ignoriert, jedoch zieht das bisherige Problem noch ein anderes hinter sich her:
Es gibt z.B. einen Usernamen "pf" und "apfeltasche". D.h. bei "pf" soll er REGEX zuschlagen und bei "apfeltasche" eben nicht. Wenn aber z.B. der User "pf" folgende Namen eingibt "test@pf" oder "te pf" soll der REGEX auch zuschlagen.


Gruss,
Dani

P.S. Weiß nicht so ganz, wie ich das Problem genauer schildern kann.
Bitte warten ..
Mitglied: bastla
25.08.2008 um 20:07 Uhr
Hallo Dani!

Wenn ich das richtig interpretiere, muss der Username am Ende eines "Wortes" stehen ...

In diesem Fall wäre noch ein "\b" (Stichwort: "Wortgrenze") an den Suchstring anzuhängen - zB in der letzten Script-Zeile durch
01.
WScript.Echo Pattern & "\b"
Um auch das Zeichen davor einzuschränken, zB
01.
WScript.Echo "(\b|[@])" & Pattern & "\b"
Die eckigen Klammern um "@" sind eigentlich unnötig, außer, es sollen noch andere Zeichen unmittelbar vor dem Suchbegriff akzeptiert werden ...

Grüße
bastla
Bitte warten ..
Mitglied: Dani
25.08.2008 um 20:28 Uhr
Hi bastla nicht ganz...ich versuche es anders zu erklären:

Im Moment habe ich folgenden Regexp - Ausdruck: [pP][fF] aus dem bisherigen Verlauf. Nun ist es so, dass wenn ich z.B. "apfeltasche" eingebe, matched Regex auch. Das soll aber so nicht sein. Sprich, er soll nur matchen wenn es das Wort an sich ist und nicht in einem Wort selbst vorkommt ( siehe Beispiel). Zum Beispiel soll auch bei folgenden Eingaben matchen:
test@pf, pf @ test, etc... sprich wenn ein Leerzeichen, ein "|", ein "@", ein "_" davor oder nach "pf" vorkommt soll gematched werden.


Grüsse,
Dani
Bitte warten ..
Mitglied: bastla
25.08.2008 um 20:36 Uhr
Hallo Dani!

Wenn auch Zeilenanfang und -ende mit zu berücksichtigen sind, dann vielleicht:
01.
WScript.Echo "(^|[@|_ ])" & Pattern & "($|[@|_ ])"
Grüße
bastla
Bitte warten ..
Mitglied: Dani
25.08.2008 um 20:42 Uhr
Perfekt....du bist einfach ein Schatz...
Dickes Danke!


Gruss,
Dani
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
PHP
gelöst Php regex und Array (5)

Frage von Thomas91 zum Thema PHP ...

Windows Server
gelöst Windows Server2016 TerminalServer-Rolle Erfahrungen (5)

Frage von johnde zum Thema Windows Server ...

Batch & Shell
gelöst Powershell Regex anders (1)

Frage von ukodus zum Thema Batch & Shell ...

Visual Studio
gelöst Vb.net Pfadangabe mit Wildcards wie Stern Regex Pattern (2)

Frage von Pilger83 zum Thema Visual Studio ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (22)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (19)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...