Home  >  Article  >  Backend Development  >  php 请教一个正则表达式:保留字符串中的字母、数字、下划线、小数点,短横线

php 请教一个正则表达式:保留字符串中的字母、数字、下划线、小数点,短横线

WBOY
WBOYOriginal
2016-06-06 20:48:161368browse

php 请教一个正则表达式:保留字符串中的字母、数字、下划线、小数点,短横线。
该正则如何写,谢谢了~~

回复内容:

php 请教一个正则表达式:保留字符串中的字母、数字、下划线、小数点,短横线。
该正则如何写,谢谢了~~

<code><?php $str='AB12@#$%()_.-cd';
var_dump($str);
var_dump(preg_replace("/[^a-zA-Z0-9_.-]+/","", $str));
?>
</code>

输出:

<code>string(15) "AB12@#$%()_.-cd"
string(9) "AB12_.-cd"
</code>

首先纠正你的问题的一个错误,单纯正则表达式是无法做到保留什么或者是去除什么的。正则表达式的作用是用来匹配符合条件的内容。

如果单纯的是想要提取里头符合要求的字符的话,可是试一下以下的代码:

<code><?php $text = 'In the 电影_后天 230809-people died.';

$preg = '/[^a-zA-Z0-9.\-_]/';
preg_replace($preg, "", $text);
//Inthe_230809-peopledied.
?>
</code>

如果是想要保证一个字符串中只允许如上条件出现的话,可以上网上搜一下,这种需求还是很多的(用户名的条件过滤),或者使用如下匹配(未做测试):

<code>$preg = '/([a-zA-Z0-9.\-_]*?)/';
</code>

提的太简单了。想都想得到这是一个一拥而上的问题。

表达式并不难写:[a-zA-Z0-9_\-\.]+

但在机制上,正则表达式一次肯定只能找到一块匹配。就算在正则内部可以分成匹配组,那也只能挨个匹配组单独提取,永远无法“取出来就是连接好的”。不能什么都期待一步到位的。

所以必须找到小块表达式的所有匹配,然后连接起来。

<code class="lang-php">$patt = '/[a-zA-Z0-9_\\-\\.]+/';
preg_match_all($patt, $content, $result);
echo implode('', $result);
</code>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn