Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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 问号(?)表示整个单词的量词_Regex - Fatal编程技术网

Regex 问号(?)表示整个单词的量词

Regex 问号(?)表示整个单词的量词,regex,Regex,我有大量的链接,如: https%3A%2F%2Fwww.facebook.com%2F https%3A%2F%2Fwww.facebook.com%2F%3Futm\u来源 我需要捕获(%3F)序列之前的文本,如果该序列未出现在该行中,则需要捕获整行。我想在没有if-else条件适用于整条生产线的情况下这样做 我在寻找的是一种为整个字符序列应用?量词的方法,如:^(.*)[\%3F]? 另外,我知道,有一种方法可以解决这个问题,首先将HTML样式的字符转换为单个字符(%2F->“/”和%

我有大量的链接,如:

  • https%3A%2F%2Fwww.facebook.com%2F
  • https%3A%2F%2Fwww.facebook.com%2F%3Futm\u来源
我需要捕获(%3F)序列之前的文本,如果该序列未出现在该行中,则需要捕获整行。我想在没有if-else条件适用于整条生产线的情况下这样做

我在寻找的是一种为整个字符序列应用
量词的方法,如:
^(.*)[\%3F]?

另外,我知道,有一种方法可以解决这个问题,首先将HTML样式的字符转换为单个字符(
%2F->“/”和%3F->“?”
),然后对单个字符应用
量词,但这不是我想要解决这个问题的方法

您可以使用

^(?:(?!%3F).)*
这将产生与以下表达式相同的结果:

^.*?(?=%3F|$)
但其中最有效的是它们的展开对应物

^[^%]*(?:%(?!3F)[^%]*)*

详细信息

  • ^
    -字符串的开头
  • (?:(?!%3F)。*
    -(a)除换行字符(
    )以外的任何字符,尽可能多的零个或多个连续出现(
    *
    ),不启动
    %3F
    字符序列
  • *?(?=%3F |$)
    -除换行符(
    *?
    )以外的任何零个或多个字符,尽可能少,最多但不包括
    %3F
    子字符串或字符串结尾(
    $

^[^%]*(?:%(?!3F)[^%]*)*
模式遵循展开循环原则,其中
[^%]*
匹配除
%
以外的任何字符,
(?:%(?!3F)[^%]*)*
匹配0个或多个未与
3F
跟随的
%
序列,然后匹配除
%
以外的0个字符。由于前瞻条件仅在
%
时触发,因此如果字符串中没有过多的
%
符号(在现实世界中不应如此),性能会更好。

我怀疑您想要
^(?(?!%3F)。*
我不是100%确定您想要什么,但我认为您正在寻找
^.*(?=%3F |$)
有什么反馈吗?什么是regex引擎?如果你使用Go,你将需要类似的东西。谢谢大家。他们两个都解决了我的问题。我将这个正则表达式条件用于Python脚本