正则表达式找不到点开始和结束,只允许一些特殊字符不是全部

时间:2017-07-12 12:57:12

标签: php regex preg-match

我正在尝试匹配一个不是以及(。)点开头的字符串,并允许字符串中的下划线(_)等特殊字符串 我找到了点匹配正则表达式,但无法匹配我所做的特殊字符

--no-cache

不允许

preg_match('/^(?![.])(?!.*[.]$).*$/', $str)

允许

.example
example.
example?ghh. (or some more special char not allowed in string)

所以字符串将是

 exam.pl56e
    exmple_
    _example_
    exam_ple

它正确地匹配起点和终点但我需要改进它以不允许所有特殊字符如1. Not start with dot but in the middle can be a dot(.) 2. String Not allow special char (&%$#@) etc. But allow alpha numeric, underscore 3. Not end with dot(.) 等。只允许给定特殊字符。 感谢

3 个答案:

答案 0 :(得分:1)

怎么样:

^\w[\w.]*\w$

这是匹配的alphanum或下划线,midle中的可选点,然后是字母数字或下划线。

注意:它匹配大于或等于2个字符的字符串。

这个匹配至少有一个字符长的字符串。

^(?!\.)[\w.]+$(?<!\.)

答案 1 :(得分:1)

您可以使用

'~^(?!\.)[\w.]*$(?<!\.)~'

请参阅regex demo

<强>详情:

  • ^ - 字符串开头
  • (?!\.) - .不能是第一个字符
  • [\w.]* - 0个或多个字母,数字,_.字符(将*替换为+以匹配字符串中至少1个字符禁止空字符串匹配)
  • $ - 字符串结尾
  • (?<!\.) - 最后一个字母不能是.

答案 2 :(得分:0)

.copy()

如果您需要避免使用类[^。]

的字符串开头和结尾的点

。*表示您允许字符串中的所有字符。如果您的目标是限制字符串中的某些字符,则可以在点之前使用[^ ......]。

preg_match('/^[^.].*[^.]$/', $str)