$string = "hello/welcome";
我只想要“欢迎”。
$string = "hello-welcome-to-the-world";
我想要“你好 - 欢迎”
我试试这个
print $1 if($string =~ m#(?:/|)(.*)(?:-to-)#); # got hello-welcome
print $1 if($string =~ m#(?:/)(.*)(?:-to-|)#); # got welcome
但我无法从单个正则表达式获得所需的输出。 请解决并解释......
使用这个(?:\w.+/)?(.*?(?=$|-to-))
,我得到了两个字符串的答案
答案 0 :(得分:1)
这个正则表达式匹配你的两个案例。所需的输出也在$1
。
((?:\w+-)?welcome)
(?:\w+-)?
可选地匹配欢迎之前的单词然后连字符。由于它可选择匹配,如果它不存在,输出只是“欢迎”。
答案 1 :(得分:0)
(?<=^|/).*?(?=$|-to-)
匹配(字符串或斜杠的开头)和(字符串的结尾或-to - )之间的最短匹配。
如果您使用环视,这是许多必须提取捕获组的情况中的另一个。
编辑:由于可变长度的后视不起作用,请尝试:
(?<![^/])[^/]*?(?=$|-to-)