【问题标题】:PHP Regex for checking space or certain characters after stringPHP Regex 用于检查字符串后的空格或某些字符
【发布时间】:2011-10-08 07:42:28
【问题描述】:

我需要一个正则表达式,它基本上可以检查字符串后的空格、换行符等。

所以条件是,

  1. 允许包含特殊字符._-+字符串,即@hello.world@hello_world@helloworld 等。
  2. 丢弃包括特殊字符在内的任何内容,其中后面没有字母数字字符串,即@helloworld.<space>@helloworld-<space>@helloworld.? 等必须解析为@helloworld

我现有的正则表达式是/@([A-Za-z0-9+_.-]+)/,它完美地工作条件#1,但似乎仍然存在问题条件#2

我在preg_replace()使用上面的正则表达式

解决方案

$str = preg_replace('#@[\w+.\-]+\b#', '[[$0]]', $str);

这很好用。

经过测试

http://gskinner.com/RegExr/

【问题讨论】:

    标签: php regex string


    【解决方案1】:

    您可以使用word boundaries 轻松找到字母数字字母和非字母数字字母之间的位置:

    $str = preg_replace('#@[\w+.\-]+\b#', '[[$0]]', $str);
    

    工作示例:http://ideone.com/0ShCm

    【讨论】:

      【解决方案2】:

      这是一个想法:

      1. 使用strrev反转字符串
      2. 使用strcspn 查找不包含任何字母数字字符的反转字符串的最长前缀
      3. substr 去掉前缀
      4. 再次反转字符串;这是你的最终结果

      See it in action.

      我没有考虑将字符串中的合法字符限制为某个子集的任何要求,但您可以为此使用正则表达式(甚至strspn,这可能会更快)。

      【讨论】:

      • 您的代码非常适合我,但我需要@kobi 提供的精确解决方案。
      • @whoru:如果我得到正确的描述,那段代码就不会像你描述的那样工作。尝试输入@helloworld_。忠告:不要使用您不完全理解的解决方案。
      • 我需要@helloworld_ 被接受,因为@helloworld_ 是从helloworld_@gmail.com 之类的东西中检索出来的
      【解决方案3】:

      原因是因为它正在读取整个字符串。如果您希望它解析字母数字部分之后的所有内容,您可能需要执行 like and end(explode());并运行它以确保它无效,如果它无效,则将其从等式中删除,但随后您必须检查每个可能的爆炸点的结尾,即.、-、~等.

      然后,您可能会遇到另一个陷阱,即对于带有字母数字值的项目或任何内容,它可能只会解析最后一个字母数字字符之后的所有内容。

      很抱歉,这没有多大帮助,但我认为大声思考确实有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-09
        相关资源
        最近更新 更多