PHP Regex用于检查字符串后的空格或某些字符

时间:2011-10-08 07:42:29

标签: php regex string

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

条件是,

  1. 允许使用特殊字符 . _ - {{字符串中的1}} +@hello.world@hello_world等。
  2. 放弃任何包含特殊字符的内容,其中没有字母数字字符串,即@helloworld@helloworld.<space>@helloworld-<space>等必须解析为@helloworld.?
  3. 我现有的RegEx为@helloworld,效果非常好条件#1 ,但似乎还有问题条件#2

    我在/@([A-Za-z0-9+_.-]+)/

    中使用RegEx以上

    解决方案

    preg_replace()

    这很有效。

    使用

    进行测试
      

    http://gskinner.com/RegExr/

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

这是一个想法:

  1. 使用strrev反转字符串
  2. 使用strcspn查找不包含任何字母数字字符的反向字符串的最长前缀
  3. 使用substr
  4. 关闭前缀
  5. 再次反转弦乐;这是你的最终结果
  6. <强> See it in action

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

答案 2 :(得分:0)

原因是因为它正在读取整个字符串。如果你想要它解析字母数字部分之后的所有内容你可能必须这样做并结束(explode());并运行它以确保它无效并且如果它无效然后从等式中删除它,但是你必须检查每个可能的爆炸点的结束,即。, - ,〜等

然后,您可能遇到的另一个陷阱是,在项目或任何具有字母数字值的情况下,它可能只是从最后一个字母数字字符后解析所有内容。

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