Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在另一个文本中间匹配模式?_Java_Regex_String - Fatal编程技术网

Java 如何在另一个文本中间匹配模式?

Java 如何在另一个文本中间匹配模式?,java,regex,string,Java,Regex,String,我想使用java正则表达式从给定的URL获取一个数字 问题是模式应该出现在URL的中间。 我怎样才能修改我的正则表达式 Pattern p = Pattern.compile("[.w]*/pins/[.d]+/edit"); Matcher m = p.matcher("https://mysite.com/providers/271/pins/4997/edit"); while (m.find()) { String id = m.group(); } 如果您希望匹配4997,并

我想使用java正则表达式从给定的URL获取一个数字

问题是模式应该出现在URL的中间。

我怎样才能修改我的正则表达式

Pattern p = Pattern.compile("[.w]*/pins/[.d]+/edit");
Matcher m = p.matcher("https://mysite.com/providers/271/pins/4997/edit");
while (m.find()) {
    String id = m.group();
}

如果您希望匹配
4997
,并且在
模式中没有任何限制来验证
URL
(无论如何不应该使用regex完成),那么您可以使用基于“lookarounds”的简单解决方案:


如果您希望匹配
4997
,并且在
模式中没有任何限制来验证
URL
(无论如何不应该使用regex完成),那么您可以使用基于“lookarounds”的简单解决方案:


如果要捕获管脚之间的数字并进行编辑,请尝试下面的正则表达式

(?<=pins\/)(\d+)(?=\/edit)

如果要捕获管脚之间的数字并进行编辑,请尝试下面的正则表达式

(?<=pins\/)(\d+)(?=\/edit)

尝试
pins/(\d+)/edit$
,只需对正则表达式模式做一些小的更改

此处,
$
表示行尾,括号
()
用于对
管脚和
编辑
内匹配的数字进行分组

示例代码:

Pattern p = Pattern.compile("pins/(\\d+)/edit$");
Matcher m = p.matcher("https://mysite.com/providers/271/pins/4997/edit");
if (m.find()) {
    String id = m.group(1);
    System.out.println(id); // 4997
}
String str = "https://mysite.com/providers/271/pins/4997/edit";
String[] arr = str.split("/");
System.out.println(arr[arr.length - 2]); // 4997

您也可以使用
String#split()
方法

示例代码:

Pattern p = Pattern.compile("pins/(\\d+)/edit$");
Matcher m = p.matcher("https://mysite.com/providers/271/pins/4997/edit");
if (m.find()) {
    String id = m.group(1);
    System.out.println(id); // 4997
}
String str = "https://mysite.com/providers/271/pins/4997/edit";
String[] arr = str.split("/");
System.out.println(arr[arr.length - 2]); // 4997
尝试
pins/(\d+)/edit$
,对正则表达式模式进行轻微更改

此处,
$
表示行尾,括号
()
用于对
管脚和
编辑
内匹配的数字进行分组

示例代码:

Pattern p = Pattern.compile("pins/(\\d+)/edit$");
Matcher m = p.matcher("https://mysite.com/providers/271/pins/4997/edit");
if (m.find()) {
    String id = m.group(1);
    System.out.println(id); // 4997
}
String str = "https://mysite.com/providers/271/pins/4997/edit";
String[] arr = str.split("/");
System.out.println(arr[arr.length - 2]); // 4997

您也可以使用
String#split()
方法

示例代码:

Pattern p = Pattern.compile("pins/(\\d+)/edit$");
Matcher m = p.matcher("https://mysite.com/providers/271/pins/4997/edit");
if (m.find()) {
    String id = m.group(1);
    System.out.println(id); // 4997
}
String str = "https://mysite.com/providers/271/pins/4997/edit";
String[] arr = str.split("/");
System.out.println(arr[arr.length - 2]); // 4997

附近失踪的抓捕小组\\d@JEY不完全是。另请参见注释。周围缺少捕获组\\d@JEY不完全是。另请参见注释。
/
在Java正则表达式中并不特殊,您不需要逃避它,这意味着您可能不应该避免混淆人们(尤其是那些不熟悉Java正则表达式的人).
/
在Java正则表达式中并不特殊,您不需要逃避它,这意味着您可能不应该避免混淆人们(尤其是那些刚接触Java正则表达式的人)。