-4
$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

但我无法从单个 regexp 获得所需的输出。请解决并解释...

通过使用这个(?:\w.+/)?(.*?(?=$|-to-)),我得到了两个字符串的答案

4

2 回答 2

1

此正则表达式匹配您的两种情况。所需的输出也在$1.

((?:\w+-)?welcome)

(?:\w+-)?可选地匹配一个单词,然后是欢迎前的连字符。由于它是可选匹配的,如果它不存在,则输出只是“欢迎”。

于 2012-06-01T12:36:08.417 回答
0
(?<=^|/).*?(?=$|-to-)

这匹配(字符串开头或斜杠)和(字符串结尾或-to-)之间的最短匹配。

如果您使用环视,这是不需要提取捕获组的众多情况中的另一种。

编辑:由于可变长度后视不起作用,试试这个:

(?<![^/])[^/]*?(?=$|-to-)
于 2012-06-01T12:41:44.000 回答