我正在尝试匹配一个不是以及(。)点开头的字符串,并允许字符串中的下划线(_)等特殊字符串 我找到了点匹配正则表达式,但无法匹配我所做的特殊字符
--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(.)
等。只允许给定特殊字符。
感谢
答案 0 :(得分:1)
怎么样:
^\w[\w.]*\w$
这是匹配的alphanum或下划线,midle中的可选点,然后是字母数字或下划线。
注意:它匹配大于或等于2个字符的字符串。
这个匹配至少有一个字符长的字符串。
^(?!\.)[\w.]+$(?<!\.)
答案 1 :(得分:1)
您可以使用
'~^(?!\.)[\w.]*$(?<!\.)~'
请参阅regex demo
<强>详情:
^
- 字符串开头(?!\.)
- .
不能是第一个字符[\w.]*
- 0个或多个字母,数字,_
或.
字符(将*
替换为+
以匹配字符串中至少1个字符禁止空字符串匹配)$
- 字符串结尾(?<!\.)
- 最后一个字母不能是.
答案 2 :(得分:0)
.copy()
如果您需要避免使用类[^。]
的字符串开头和结尾的点。*表示您允许字符串中的所有字符。如果您的目标是限制字符串中的某些字符,则可以在点之前使用[^ ......]。
preg_match('/^[^.].*[^.]$/', $str)