正则表达式之间的所有东西之间的斜杠

时间:2013-03-29 14:58:23

标签: regex

/猪/拉丁/

下面是它的背景: http://www.mysite.com/pig/latin/

我有一个包含/ pig / latin /的值,或者它可能是/ pig / latin / is / great

我只需要猪的部分。这是怎么做到的? 你能解释一下这个模式吗

3 个答案:

答案 0 :(得分:1)

这应该匹配斜杠之间的第一个文本实例,假设没有问题的捕获:

(?<=\/)[^\/]+(?=\/)

你的正则表达式解析器应该在你的字符串中从左向右移动,并假设没有标志匹配所提供模式的所有实例,只匹配第一个实例。前瞻(?<=...)和后瞻(?=...)表示法将与提供的字符匹配,但不会在匹配的组中返回它们。 [^\/]+的字符类匹配将匹配除 /之外的任何字符的一个或多个实例。

答案 1 :(得分:1)

假设只有小写字母,这将提供第一部分。

^/([a-z]+)/.*
  • 方括号创建一个字符类,其中允许从a到z的字母范围。
  • 之后的+表示必须有一个或多个此类的实例。
  • 周围的括号表示“捕获此组”,即这是您要返回的位。
  • 斜杠是你的文字斜杠,有助于将正则表达式放在字符串中。
  • 尾随点表示任何字符,此后的星号表示零个或多个正在进行的表达式......即零个或多个任何字符。
  • 开头的^将正则表达式锚定到字符串的开头...所以如果这个字符串可以出现在字符串中的任何地方,而不仅仅是在开头,那么你应该删除那个位。

根据您的编程语言,可能还需要某种分隔符来表示表达式的开头和结尾。

如果您需要除小写字母之外的字符,请将它们添加到字符类中,例如:^/([a-zA-Z0-9]+)/.*也将允许使用大写字母和数字。

答案 2 :(得分:1)

假设你匹配以匹配以/开头的字符串的第一部分,然后将内容拉到下一个/那么这应该起作用

^/([^/]++)/.*+$

java中的概念证明

public static void main(String[] args) {
    final String s = "/pig/latin/";
    final Pattern p = Pattern.compile("^/([^/]++)/.*+$");
    final Matcher m = p.matcher(s);
    m.find();
    System.out.println(m.group(1));
}

输出

pig

您可能需要以其他语言转义正斜杠。