gpt4 book ai didi

regex - PCRE 正则表达式语法

转载 作者:行者123 更新时间:2023-12-04 18:19:54 33 4
gpt4 key购买 nike

我想这或多或少是一个由两部分组成的问题,但首先是基础知识:我正在编写一些 PHP 以使用 preg_match_all 来查找以 {} 结尾的字符串的变量。然后它遍历每个返回的字符串,用 MySQL 查询中的数据替换它找到的字符串。

第一个问题是:有什么好的网站可以真正了解 PCRE 表达式的来龙去脉吗?我在 Google 上做了很多搜索,但目前我能找到的最好的是 http://www.regular-expressions.info/ .在我看来,那里的信息没有很好的组织,因为我不想在需要编写复杂的正则表达式时寻求帮助,所以请指点我几个网站(或几本书!)这将有助于我以后不必打扰你们。

第二个问题是:我有这个正则表达式

"/{.*(_){1}(.*(_){1}[a-z]{1}|.*)}/"

我需要它来捕获 {first_name}, {last_name}, {email} 等实例等。我对这个正则表达式有三个问题。

第一个是它将“ {first_name} {last_name}”视为一个字符串,而它应该将其视为两个。我已经能够通过检查空间的存在来解决这个问题,然后在空间上爆炸。凌乱,但它的工作原理。

第二个问题是它包含标点符号作为捕获字符串的一部分。因此,如果您有“ {first_name} {last_name} ”,那么它将逗号作为字符串的一部分返回。我已经能够通过简单地使用 preg_replace 删除句点、逗号和分号来部分解决这个问题。虽然它适用于那些标点符号项目,但我的逻辑无法处理感叹号、问号和其他所有内容。

我对这个正则表达式的第三个问题是它根本看不到 {email} 的实例。

现在,如果您可以、愿意并且有时间简单地将这个问题的解决方案交给我,谢谢您,因为这将解决我眼前的问题。但是,即使您可以做到这一点,也请提供一个 lmgfty 提供良好的网站作为引用和/或一两本书,以提供有关该主题的良好教育。由于资金紧张,站点会更可取,但如果一本书是解决方案,我会找到钱(假设我本地的图书馆系统无法获得上述数量)。

最佳答案

那时我发现 PHP 自己的 PCRE 语法引用很好:http://uk.php.net/manual/en/reference.pcre.pattern.syntax.php

说说你的表情吧。它比必要的要冗长得多。在我们进行此操作时,我将对其进行简化。

查看您要匹配的内容的一种相当简单的方法:“找到 { ,然后是任意数量的字母或下划线,然后是 } ”。一个正则表达式是(在 PHP 的 string-y 语法中):'/\{[a-z_]+\}/'
这将匹配您的所有示例,但也匹配一些更狂野的示例,例如 {__a_b} .如果这不是一个选项,我们可以使用更复杂的描述:“找到一个 { ,然后是一堆字母,然后(尽可能频繁地)一个下划线,然后是一堆字母,然后是 } ”。在正则表达式中:/\{([a-z]+(_[a-z]+)*\}/
第二个可能需要更多解释。因为我们要重复匹配 _foo 的东西段,我们需要把它放在括号中。然后我们说:尽量多找这个,但如果根本找不到也没关系(这就是 * 的意思)。

所以现在我们有一些东西可以比较你的尝试,让我们看看是什么导致了你的问题:

  • 您的表达式匹配 {} 中的任何字符,包括 }{和一大堆其他的东西。换句话说,{abcde{_fgh}将被您的正则表达式接受,{abcde} fg_h {ijkl} 也会被接受.
  • 你有一个强制性的_在那里,就在第一个 .* 之后. (_){1} (这意味着与 _ 完全相同)说:无论发生什么,如果这不在这里就爆炸!显然你实际上并不想要那个,因为它永远不会匹配 {email} .

  • 这是您的正则表达式匹配的简单语言的完整描述:
  • 匹配 { .
  • 匹配 _ .
  • 绝对匹配任何东西,只要你能在任何东西之后匹配所有剩余的规则。
  • 匹配 _ .
  • 匹配单个字母。
  • 而不是 _和单个字母,绝对没有问题,也是。
  • 匹配 } .

  • 这可能与您想要的相差甚远。不过不用担心。正则表达式需要一段时间才能习惯。我认为如果您从指令的角度考虑它会非常有帮助,即在构建正则表达式时,尝试将其构建为“找到这个,然后找到那个”等。然后找出正确的语法来实现正是这样。

    这很困难,主要是因为并非您脑海中可能想出的所有指令都可以轻松转换为正则表达式的一部分……但这就是经验的来源。我向您保证,您很快就会把它写下来...如果您一开始就相当有条理地制作正则表达式。

    祝你好运! :)

    关于regex - PCRE 正则表达式语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10887744/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com