Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
Regex 通过正则表达式在标记语言中匹配URL_Regex_Url_Mediawiki - Fatal编程技术网

Regex 通过正则表达式在标记语言中匹配URL

Regex 通过正则表达式在标记语言中匹配URL,regex,url,mediawiki,Regex,Url,Mediawiki,我正在用标记语言编写一个匹配URL的代码(不必是有效的),您可以简单地导入URL,也可以在[]之间添加它。我举几个例子: 1- 2-[标题] 3-[标题] 4-() 5-[http://en.wikipedia.org/wiki/Main_Page] 我需要三个正则表达式,一个用于括号中的URL(第2、3、5号),另一个用于不在括号中的URL(1、4),一个用于所有这些 第一个和第二个很简单我做到了: notInside = '\]\s<>"' notAtEnd = '\]\s\.:

我正在用标记语言编写一个匹配URL的代码(不必是有效的),您可以简单地导入URL,也可以在[]之间添加它。我举几个例子:
1-
2-[标题]
3-[标题]
4-()
5-[http://en.wikipedia.org/wiki/Main_Page]
我需要三个正则表达式,一个用于括号中的URL(第2、3、5号),另一个用于不在括号中的URL(1、4),一个用于所有这些 第一个和第二个很简单我做到了:

notInside = '\]\s<>"'
notAtEnd = '\]\s\.:;,<>"\|\)'
regex = r'(?P<url>http[s]?://[^%(notInside)s]*?[^%(notAtEnd)s]' \
r'(?=[%(notAtEnd)s]*\'\')|http[s]?://[^%(notInside)s]*' \
r'[^%(notAtEnd)s])' % {'notInside': notInside, 'notAtEnd': notAtEnd}
notInside='\]\s''
notAtEnd='\]\s\.:;,“\\\\)”
regex=r'(?Phttp[s]?:/[^%(不在内部)s]*?[^%(不在内部)s]'\
r'(?=[%(notAtEnd)s]*\'\')| http[s]?://[^%(notiden)s]*'\
r'[^%(notAtEnd)s])'%{'notInside':notInside,'notAtEnd':notAtEnd}
但问题从第三个开始,一个URL以括号(或除括号以外的任何东西)开始,如数字4,正则表达式不应该匹配URL结尾的“)”但有时人们使用“)”在URL结尾放在括号中,正则表达式必须匹配此“)”如数字3。我不能为第三个单独编写两个正则表达式并合并结果

另一件事:我会用自由软件代码发布你的帮助,所以请暗示我可以在MIT许可证中发布你的代码。谢谢

描述 该正则表达式将:

  • 匹配方括号、圆括号和无括号内的字符串URL
  • 将在不同的捕获组中捕获每种类型的括号内匹配

例子 实例:

示例文本

1-http://1en.wikipedia.org/wiki/Main_Page
2-[http://2en.wikipedia.org/wiki/Main_Page Title]
3-[http://3en.wikipedia.org/wiki/(Main_Page) Title]
4-(http://4en.wikipedia.org/wiki/Main_Page)
5-[http://5en.wikipedia.org/wiki/Main_Page]
匹配

[0][0] = http://1en.wikipedia.org/wiki/Main_Page
[0][1] = 
[0][2] = 
[0][3] = http://1en.wikipedia.org/wiki/Main_Page

[1][0] = [http://2en.wikipedia.org/wiki/Main_Page Title]
[1][1] = http://2en.wikipedia.org/wiki/Main_Page Title
[1][2] = 
[1][3] = 

[2][0] = [http://3en.wikipedia.org/wiki/(Main_Page) Title]
[2][1] = http://3en.wikipedia.org/wiki/(Main_Page) Title
[2][2] = 
[2][3] = 

[3][0] = (http://4en.wikipedia.org/wiki/Main_Page)
[3][1] = 
[3][2] = http://4en.wikipedia.org/wiki/Main_Page
[3][3] = 

[4][0] = [http://5en.wikipedia.org/wiki/Main_Page]
[4][1] = http://5en.wikipedia.org/wiki/Main_Page
[4][2] = 
[4][3] = 
可供替代的 我不确定lookbehinds在media wiki中的效果如何,但你可以试试这个


(?我尝试了替代正则表达式,但它仍然匹配标记文件中的右括号,其中链接以方括号和圆括号的格式写入。示例:您可以通过许多在线正则表达式编辑器中的一个提供示例,如。我怀疑您没有包括此正则表达式工作所需的“http://”。