-5

/猪/拉丁/

这是它的上下文: http ://www.mysite.com/pig/latin/

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

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

4

3 回答 3

1

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

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

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

于 2013-03-29T15:02:52.643 回答
1

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

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

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

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

于 2013-03-29T15:08:13.210 回答
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

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

于 2013-03-29T15:08:59.323 回答