[VBA]Regex jak zapisać to wymaganie?

Odpowiedz Nowy wątek
2019-06-10 17:49
0

Mam do zapisania taki string:

1 znak --> litera duza lub mala - znaki alfanumeryczne
Kolejne 10 - Duze litery lub male, moga zawierac tez cyfry od 0-9 oraz znaki specjalne "-" oraz "_".
Na koncu Moze byc literka mala, duza bądź cyfry od 0-9.
Dlugosc max 12 znaków, min 1 znak, który musi być wielka badź mała literką z alfabetu.

Moje próby:

[A-Za-z][A-Za-z0-9-_]{0,10}[A-Za-z0-9]

Ale nie wiem jak zapisać min 1 znak i ze musi być: [A-Za-z]

Poproszę o pomoc,
Jacek

edytowany 1x, ostatnio: jaryszek, 2019-06-10 17:50

Pozostało 580 znaków

2019-06-10 18:22
0

min 1 znak

[a-zA-Z]+

Dlugosc podwyrazenia: <<pattern>>{min,max}
Znak - musisz chyba wy'escape'owac jesli chcesz zeby bylo znakiem a nie czescia wyrazenia: \-


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110
edytowany 3x, ostatnio: stivens, 2019-06-11 11:21

Pozostało 580 znaków

2019-06-11 07:07
0
stivens napisał(a):

min 1 znak

[a-zA-Z]+

Dlugosc podwyrazenia: <<pattern>>{min,max}
Znak - musisz chyba wy'escape'owac jesli chcesz zeby bylo znakiem a nie czescia wyrazenia: -

Dziekuje bardzo,
sprawdzę!

\- ucielo mi slasha ;) - stivens 2019-06-11 11:21

Pozostało 580 znaków

2019-06-11 11:29
0

Okej,

mam dalej z tym problem.

Mój string to:

fe12345678912

taki pattern mam:

[A-Za-z]+[A-Za-z0-9-_]{1,10}[A-Za-z0-9]

a wynik jest:
fe12345678912

link:
https://regex101.com/

jak zabiore + to jest ok ale brakuje warunku na min 1 znak.
(Wynik z [A-Za-z][A-Za-z0-9-_]{1,10}[A-Za-z0-9] = fe1234567891)
Proszę o pomoc

edytowany 1x, ostatnio: jaryszek, 2019-06-11 11:29

Pozostało 580 znaków

2019-06-11 11:41
0

([a-zA-Z][a-zA-Z0-9\-\_]{0,10}[a-zA-Z0-9]){1,12}

https://regexr.com/


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110
edytowany 3x, ostatnio: stivens, 2019-06-11 11:51
o wow ! dziekuje. Czy zawsze jest konieczne podowanie znaków? [a-zA-Z]{1} to nie to samo co [a-zA-Z]? - jaryszek 2019-06-11 11:44
Masz racje - stivens 2019-06-11 11:46
Dodalem poprawki bo pattern matchowal stringi o dl. min 2 - stivens 2019-06-11 11:48
dzieki! A co znaczy "?" na koncu wyrazenia? - jaryszek 2019-06-11 11:50
Nie no sorry bez pytajnika powinno byc bo wtedy potencjalnie _ moze byc. Mea culpa - stivens 2019-06-11 11:52

Pozostało 580 znaków

2019-06-11 11:51
0

Okej,

w VBA niestety dalej zwraca TRUE zamiast FALSE:

Sub test()

Dim regex As Object, str As String
Set regex = CreateObject("VBScript.RegExp")

With regex
  .Pattern = "([a-zA-Z][a-zA-Z0-9\-\_]{0,10}[a-zA-Z0-9]?){1,12}"
End With

str = "fe12345678912"
Debug.Print regex.test(str)

End Sub

co robie źle?

Pozostało 580 znaków

2019-06-11 11:53
1

Ale co to robi w VBA? Sprawdza czy taki podstring znajduje sie w stringu czy ze string spelnia pattern?


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110
edytowany 1x, ostatnio: stivens, 2019-06-11 11:54

Pozostało 580 znaków

2019-06-11 12:16
1
^[A-Za-z][-A-Z0-9_a-z]{10}[A-Z0-9a-z]$

Jeżeli to nie pasuje, pokaż testowe stringi – co ma wejść i co ma nie wejść.

to działa super! - jaryszek 2019-06-14 18:02

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0