jjzjj

php - 破折号和下划线的 preg_match 的奇怪行为

coder 2024-04-28 原文

我有以下两个表达式。两者几乎相同,首先我检查以 3 个破折号结尾的字符串,然后检查以 3 个下划线结尾的字符串

$str="this-is_normal-test---";
$str= preg_match("/[a-zA-z0-9]+(-+)$/",$str,$matches);
print_r($matches);

$str="this-is_normal-test___";
$str= preg_match("/[a-zA-z0-9]+(_+)$/",$str,$matches);
print_r($matches);

这是输出:

Array
(
    [0] => test---
    [1] => ---
)
Array
(
    [0] => test___
    [1] => _
)

问题是,第一个显示所有三个匹配的破折号,第二个显示只匹配一个下划线。为什么?这种奇怪行为的逻辑/发生情况是什么?

最佳答案

在 US-ASCII(和大多数派生编码)中,[A-z] 范围包括 _ 但不包括 -:

echo implode('', range('A', 'z'));
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz

我想这是一个打字错误,你的意思是:

'/[a-z0-9]+(-+)$/i'

关于php - 破折号和下划线的 preg_match 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23384202/

有关php - 破折号和下划线的 preg_match 的奇怪行为的更多相关文章

  1. ruby - 允许主机名包含下划线的 URI.parse 的替代方法 - 2

    我正在使用DMOZ的listofurltopics,其中包含一些具有包含下划线的主机名的url。例如:608609TheOuterHeaven610InformationandimagegalleryofMcFarlane'sactionfiguresforTrigun,Akira,TenchiMuyoandotherJapaneseSci-Fianimations.611Top/Arts/Animation/Anime/Collectibles/Models_and_Figures/Action_Figures612虽然此url可以在网络浏览器中使用(或者至少在我的浏览器中可以使用:

  2. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  3. ruby - 用 ruby​​ 将 2 个破折号插入这个字符串的最短方法是什么? - 2

    这是字符串:04046955104021109我需要这样格式化:040469551-0402-1109用ruby​​做到这一点的最短/最有效的方法是什么? 最佳答案 两个简单的插入就可以了:example_string.insert(-9,'-').insert(-5,'-')负数表示您从字符串末尾开始计数。如果您愿意,也可以从头数起:example_string.insert(9,'-').insert(14,'-') 关于ruby-用ruby​​将2个破折号插入这个字符串的最短方法是

  4. ruby - 为什么 `Symbol#match` 的行为与 `String#match` 和 `Regexp#match` 不同? - 2

    String#match和Regexp#match在匹配成功时返回一个MatchData:"".match(//)#=>#//.match("")#=>#//.match(:"")#=>#但是Symbol#match返回匹配位置(如String#=~)::"".match(//)#=>0为什么Symbol#match表现不同?有用例吗? 最佳答案 我将其报告为Ruby核心中的错误:https://bugs.ruby-lang.org/issues/11991.让我们看看他们会怎么说。更新被质疑的行为似乎是一个错误。似乎从Ruby2.

  5. ruby , `match' : invalid byte sequence in UTF-8 - 2

    我对UTF-8编码有一些问题。我在这里阅读了一些帖子,但它仍然无法正常工作。这是我的代码:#!/bin/envruby#encoding:utf-8defdeterminefile=File.open("/home/lala.txt")file.eachdo|line|puts(line)type=line.match(/DOG/)puts('aaaaa')iftype!=nilputs(type[0])breakendendend这是我文件的前3行:;?lalalalal60000065535-1362490443-0000006334-0000018467-0000000041en

  6. Ruby 命名约定/双下划线/有用的东西 - 2

    我知道有__FILE__、__LINE__和__send__。Delegator类中有__getobj__和__setobj__。Ruby标准库中是否还有其他有用的“奇怪”双下划线优点? 最佳答案 这是Ruby2.1的完整列表:__callee__(内核)__dir__(内核)__method__(内核)__id__(基本对象)__send__(基本对象)__ENCODING__(关键词)__LINE__(关键词)__FILE__(关键词)来自delegate:__getobj__(委托(delegate)人)__setobj__(

  7. ruby - 为什么这两个不同的正则表达式根据下划线的位置在 Ruby 中返回不同的结果 - 2

    我有以下内容:.[11]pry(main)>"abBN123-4.56".scan(/BN([0-9_\.-]+)/)=>[["123-4.56"]][12]pry(main)>"abBN123-4.56".scan(/BN([0-9\.-_]+)/)=>[["123"]]我不确定为什么第二个末尾带有下划线的行为与第一个行为不同。RegEx解析器如何解释它以使其不同? 最佳答案 这是因为您将连字符(-)放在了字符类的中间而没有被转义。在字符类[]中,您可以放置​​一个连字符(-)作为first或last性格。如果您将连字符放在其他任

  8. ruby - 带有表双下划线的 Sequel gem 限定查询列名 - 2

    使用Sequelgem:employees=DB[:prm_master__employee.identifier].join(:prm_master__employee_custom_fields.identifier,:employee=>:employee).where("termination_date>=?","06/01/2012").or("termination_date=NULL").and("employee='holderl'")以上失败:~/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/sequel-3.

  9. No loop matching the specified signature and casting was found for ufunc greater - 2

    目录报错信息np.greater学习临时解决方法:np.greater去掉dtype报错信息pipinstallnumpy==1.24报错代码:dda=np.cumsum(np.greater(counts,0),dtype=np.int32)print(dda)Noloopmatchingthespecifiedsignatureandcastingwasfoundforufuncgreaternp.greater学习1.函数功能:判断参数一是否大于参数二。2.参数介绍  arr1:第一个参数类似一个数组  arr2:第二个参数类似一个数组  out:返回值是bool类型或者是元素为bool

  10. ruby-on-rails - Rails 还是 Sinatra? PHP程序员入门学习哪个好? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?

随机推荐