【问题标题】:Capture string only on exact matching with ruby仅在与 ruby​​ 完全匹配时捕获字符串
【发布时间】:2013-07-07 20:51:21
【问题描述】:

我试图仅在匹配准确时捕获字符串。

即有效:

/this-is-an-exact-matc
/this-is-also-an-exact-match
/this-is-other-exact-match?d=1
/balbabla

无效:

/this-is-not/fafa/fafa
/dede/ddd/dfsfd
/

您可以只将一个路径级别视为有效字符串。 我正在尝试:

\/(.*)

...但这也验证了像 /bbalbalb/blablba 这样的真实情况

谢谢

【问题讨论】:

    标签: ruby regex url


    【解决方案1】:

    也许是这样的:

    string =~ %r{\A/[^/]+\z}
    

    要了解您在评论中提出的问题,请尝试以下操作:

    string[%r{(?<=\A/)(?=[^/]+\z)([^?]+)}]
    

    【讨论】:

    • 谢谢,还有一个问题:我使用 \A\/([^\/]+)\z 来获取除 / 之外的所有内容。给定“/dad?var=1”,我怎么能只取“dad”?
    • @ratamaster 为什么你需要regex 来做这个测试。为什么不是非正则表达式解决方案?
    • @ratamaster 你关心?后面是否出现斜线吗?
    • @Priti 因为正则表达式更聪明?其实我可以通过“/”来解决这个问题,但我只是想尝试一些更有趣的东西。
    • @ratamaster 我不擅长正则表达式,当我有一些直接的函数要解决时,我个人会避免使用regex,因为regex 速度很快,如果没有妥善处理,它也很危险。你的选择你会怎么走.... :)
    【解决方案2】:
      def valid?(s)
        s.count('/') == 1
      end
      valid?('/this-is-not/fafa/fafa') # => false
      valid?('/balbabla') # => true
    

    更新(根据@CasimiretHippolyte 评论)

      def valid?(s)
        s.rindex('/') == 0
      end
      valid?('/this-is-not/fafa/fafa') # => false
      valid?('/balbabla') # => true
    

    【讨论】:

    • 我不是你的反对者,但请注意你的函数返回对blablabla/blablabla有效
    • @CasimiretHippolyte 感谢您的反馈!但这也不是有效的路径。并且 OP 在给定的示例中也没有提到这一点。根据 OP,所有路径都必须以至少一个 / 开头,这将被视为有效
    • @CasimiretHippolyte 我已根据您的评论进行了更新。请查看。
    • 你应该结合两个条件:s.count('/')==1s.rindex('/')==0
    • 你是对的,你不需要,因为它是最后一次出现的索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 2019-04-04
    • 2014-06-29
    • 2019-02-17
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多