/ / Регулярен израз съвпадат, ако в края има не-буквен знак или нищо? - regex, perl, word

Редов израз съвпадат, ако в края няма буквен знак или нищо? - regex, perl, word

Имам някои регулярни изрази, които съвпадат с хомонимите, като tw?oo? щяха да съвпадат two, to, или too, (Също така съвпада twoo, но това е добре.

Въпросът ми е, че искам регулярният израз да съответства, ако в края има пунктуация или друг нелафабетичен характер, като to, или two. или дори ,too!, Ако няма нищо в края, това също е добре.

Така че искам да съвпадне tw?oo? ако няма други символи от всяка страна, или ако има не-азбучни знаци, но не ако има букви около: tomorrow не трябва да съвпадат.

опитах [^A-Za-z]?tw?oo?[^A-Za-z]? , но тъй като класовете на героите са по избор, те просто са пропуснати.

Как бих направил това, така че регексът съвпада само с думите, ако са сами или са заобиколени от точка. (пространствата не са проблем, те са били изрязани)

Благодаря!

Отговори:

3 за отговор № 1

Използвайте граници на думите b, Те съвпадат винаги, когато дума дума (w) и не-дума характер са в съседство:

for (qw/two to tomorrow/) {
say "$_ ", /b(?:two|to|too)b/ ? "matches" : "doesn"t match";
}

изход:

two matches
to matches
tomorrow doesn"t match

редактиране

Промених регекса до /b(?:two|to|too)b/ Това е по-разбираемо от това tw?oo? и по-правилно от tw?o+, и задейства оптимизация, който превръща тази част от регенекса в много ефективна държавна машина.