Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/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 为什么正则表达式模式匹配空值_Regex - Fatal编程技术网

Regex 为什么正则表达式模式匹配空值

Regex 为什么正则表达式模式匹配空值,regex,Regex,我的正则表达式模式是 (\d*\.?\d+)?(\svarious\s)? 我只想匹配十进制数和普通数以及特定的字符串“各种” 但是在结果中,我得到了上面所要求的结果,但是通过它,我也得到了空值 这是我的字符串“期初期末利润3.000000%3.000000亏损3.000000%3.000000资本3.350845%3.346784检查各种减少是否是由于出售或交换各种合伙权益造成的。%%” 我只对8场比赛感兴趣 3.0000003.0000003.0000003.0000003.3508453

我的正则表达式模式是

(\d*\.?\d+)?(\svarious\s)?
我只想匹配十进制数和普通数以及特定的字符串“各种”

但是在结果中,我得到了上面所要求的结果,但是通过它,我也得到了空值

这是我的字符串
“期初期末利润3.000000%3.000000亏损3.000000%3.000000资本3.350845%3.346784检查各种减少是否是由于出售或交换各种合伙权益造成的。%%”

我只对8场比赛感兴趣
3.000000
3.000000
3.000000
3.000000
3.350845
3.346784
各种
各种


但是我得到了147个匹配项,包括上面的8个。

您尝试的表达式也匹配了0个字符(无限)。这就是为什么你选错了比赛。请尝试以下方法

((\d*\.?\d+)|(\svarious\s))

您尝试的表达式也匹配0个字符(无限)。这就是为什么你选错了比赛。请尝试以下方法

((\d*\.?\d+)|(\svarious\s))

目前您正在匹配字符串中的所有索引,因为这两个分组都是可选的。有效地允许匹配字符串中的任何位置,后跟零。根据我的评论,您可以尝试:

(?:\d+(?:\.\d+)?|\svarious\s)
请参阅联机

  • (?:
    -打开第一个非捕获组:
    • \d+
      -1+位
    • (?:
      -打开第二个非捕获组:
      • \。\d+
        -一个文字点和1+个数字
      • )?
        -关闭第二个非捕获组并将其设置为可选
    • |
      -或:
    • \svarious\s
      -用前导和尾随空格字符按字面意思捕获“各种”
    • -关闭第一个非捕获组

当前您正在匹配字符串中的所有索引,因为这两个分组都是可选的。有效地允许匹配字符串中的任何位置,后跟零。根据我的评论,您可以尝试:

(?:\d+(?:\.\d+)?|\svarious\s)
请参阅联机

  • (?:
    -打开第一个非捕获组:
    • \d+
      -1+位
    • (?:
      -打开第二个非捕获组:
      • \。\d+
        -一个文字点和1+个数字
      • )?
        -关闭第二个非捕获组并将其设置为可选
    • |
      -或:
    • \svarious\s
      -用前导和尾随空格字符按字面意思捕获“各种”
    • -关闭第一个非捕获组

您可以使用
(?:\d+(?:\。\d+)\124s\s)
。不知道你为什么要从字面上捕捉“各种各样的”。请使用上述注释的正则表达式。您当前的整个模式是可选的,因此空匹配项。您可以使用
(?:\d+(?:\。\d+)\124n\s)
。不知道你为什么要从字面上捕捉“各种各样的”。请使用上述注释的正则表达式。您当前的整个模式是可选的,因此空匹配。