Regex 正则表达式:Don';不匹配字符

Regex 正则表达式:Don';不匹配字符,regex,Regex,我有一个正则表达式: (?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’

我有一个正则表达式:

(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))

预期结果:

https://sub.example.org/file/track

我是regex有史以来最差的人,如果你能帮助我,我将非常感激。谢谢你的建议

只有一个例子可以解决:

^.* (https?:\/\/.*?)\?.*$
试试这个:

Search: ".* (.*)\?.*"
Replace: "$1"
我建议使用

"(https:[^ ]*)"
并替换为

"$1"
正则表达式https:[^]*表示“查找一个子字符串,该子字符串以“https:”开头,后跟零个或多个非空格字符”。正则表达式周围的括号表示“将这些括号内的所有内容视为“匹配组”。替换字符串“$1”表示“将所有内容替换为匹配组#1”-或者换句话说,括号内的所有内容,在本例中是原始字符串中与正则表达式匹配的所有内容


[^x]
结构,其中
x
是不应出现在匹配数据中的字符,是正则表达式中非常常见的结构,IMO是您应该记住并使用的结构。

您可以匹配以下正则表达式:

https:.*(?=\?)(?!=.+\?)
http[^\?]+

此PCRE(PHP)正则表达式执行以下操作:

https:     # Match string
.*         # Match 0+ chars
(?=\?)     # Use a positive lookahead to match a following '?'
(?!=.+\?)  # Use a negative lookahead to avoid matching '?' after 1+ chars
如果目录或文件名包含问号,则需要使用负前瞻。(请记住,虽然Windows不允许文件名包含问号,但Unix/OSX/Linux允许。)

例如,在字符串中

word word1 https://sub.example?.org/file/track?arg=par word
这个正则表达式会匹配

https://sub.example?.org/file/track

可以匹配以下正则表达式:

https:.*(?=\?)(?!=.+\?)
http[^\?]+
  • [^\?]+
    ->将匹配除“?”之外的所有项

任何人都不应使用超过1.5公里的正则表达式。长度。您使用的语言/工具是什么?来自:“由于正则表达式不是完全标准化的,因此带有此标记的所有问题还应包括一个指定适用编程语言或工具的标记。”