正则表达式最长可能匹配

syk*_*ker 8 regex

我有一个输入字符串,它是一个目录地址:

例: ProgramFiles/Micro/Telephone

我想非常严格地将它与单词列表匹配:

例: Tel|Tele|Telephone

我想要反对Telephone而不是Tel.现在我的正则表达式看起来像这样:

my( $output ) = ( $input =~ m/($list)/o );
Run Code Online (Sandbox Code Playgroud)

上面的正则表达式将匹配Tel.我该怎么办才能修复它?

cle*_*tus 9

如果你想要一个完整的单词匹配:

\b(Tel|Tele|Telephone)\b
Run Code Online (Sandbox Code Playgroud)

\b是一个零宽度的单词边界.在这种情况下,字边界表示从单词字符过渡到单词字符.单词字符(\w)是[0-9a-zA-Z_].

如果您只想匹配部分单词匹配中最长的匹配,请将最长的匹配.例如:

\b(Telephone|Tele|Tel)
Run Code Online (Sandbox Code Playgroud)

要么

(Telephone|Tele|Tel)
Run Code Online (Sandbox Code Playgroud)