/ / Dziwność wyrażenia regularnego w MATLAB [zamknięty] - regex, matlab

Regex oddity w MATLAB [zamknięty] - regex, matlab

Chcę używać wyrażeń regularnych do wybierania nazw plików, które kończą się na _x.txt. Myślałem, że mogę użyć wyrażenia regularnego *_x.txt ale MATLAB jest oporny.

>> regexp( "asdfg_x.txt", "*_x.txt" )
ans =
[]
>> regexp( "asdfg_x.txt", "_x.txt" )
ans =
6

Dlaczego „* _x.txt” nie działa? Zdaję sobie sprawę, że nie jest to najlepsze wyrażenie regularne dla tego, co próbuję osiągnąć, ale właśnie to powinien praca. Wiem, że zrobiłem to w Linuksie i udało mi się to wypracować. Obecnie używam Windows 7, MATLAB 2009b.

Odpowiedzi:

1 dla odpowiedzi № 1

Musisz wstawić kropkę przed gwiazdką, aby dopasować:

regexp( "asdfg_x.txt", ".*_x.txt" )

Potwierdzony z Octave 3.2.4


1 dla odpowiedzi nr 2

The * jest znak specjalny w wyrażeniu regularnym, kwantyfikatorze. Ten znak powoduje, że poprzedni znak / grupa pasuje do 0 lub więcej razy. Więc ten kwantyfikator potrzebuje czegoś do powtórzenia, ale w twoim wyrażeniu nic nie ma.

wydaje mi się, że masz na myśli regexp( "asdfg_x.txt", ".*_x.txt" ), gdzie temu . jest kolejnym znakiem specjalnym wyrażenia regularnego, pasujące do każdego znaku z wyjątkiem znaków nowej linii. Więc .* dopasuje serię dowolnych znaków.