正则纠结中…该如何处理

php中文网
发布: 2016-06-13 13:36:24
原创
1154人浏览过

正则纠结中……
[^ ] S ,是否真的等同?
去掉[^ ],$s2中的空格去不了,加上以后,什么都不匹配……

PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
function checkString($str){
        //去掉非英文以外的其他语言包括乱码、空格。需要英文加特殊符号的内容
        if(preg_match("/^ [ [:alnum:] [:space:] [:punct:] [^

	]]+ $/x",$str)){
            return $str;
        }else{
            echo "含非匹配项";
        }
}
$s1 = "!!!!!!!";
$s2 = "1 1 1 1 1 1 1";
$s3 = "123asd";
echo checkString($s1)."<br>";
echo checkString($s2)."<br>";
echo checkString($s3)."<br>";

/*输出
含非匹配项
含非匹配项
含非匹配项
*/

登录后复制

还有,将[]改成(),再加个第三参数$res,没有获取到结果集。如:
PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
if(preg_match("/^( [ [:alnum:] [:space:] [:punct:]]+ )$/x","11111111",$res)){
            print_r($res); 
        }else{  
   echo "含非匹配项";  //输出在这里
}

登录后复制


------解决方案--------------------
[^ ] S ,是否真的等同?
不等同!
S 表示非空白字符,空格也是空白字符,[^ ]众位包括

------解决方案--------------------
什么意思?去除其它只保留英文字符?
------解决方案--------------------
PHP code
if(preg_match("/^( [^s]+ )/x","1 1 1 11111",$res)){
            print_r($res);
        }else{
   echo "含非匹配项"; 
}
<br><font color="#e78608">------解决方案--------------------</font><br>你按space键位的那个空格你都没包含进来,恰巧你的串里的空格是space那个,有点晕了吧,呵呵。<br>ascii码<br>--------------<br>space -&gt; 32<br>
 -&gt; 10<br>	 -&gt; 9<br> -&gt; 12<br>
 -&gt; 13<br> -&gt; 11<br><br><br><font color="#e78608">------解决方案--------------------</font><br>你加x修正符然后正则里还有空格符,这不是白用x了么?<br>
登录后复制
PHP code
if(preg_match("/([^ 

	]+)/","1 2 3 4444",$res))
{
   print_r($res)
}
<br><font color="#e78608">------解决方案--------------------</font><br>第一个问题就说你想留下什么吧<br>第二个:
登录后复制
PHP code
if(preg_match('/(.)/',$str,$matches))
    echo '不能有连续三位相同';
<br><font color="#e78608">------解决方案--------------------</font><br>
登录后复制
探讨

PHP code

if(preg_match("/([^ ]+)/","1 2 3 4444",$res))
{
print_r($res);
}
//输出
Array ( [0] => 1 [1] => 1 ) //2 3 4444呢?


还用,请帮忙回答:
1、可过滤换页符、换行符、回车符、空格、制表符、垂直制表符、特殊字符,正则表达式:?
2、如果在1……

------解决方案--------------------
嗯,然后加上判断是否有重复字符的,可能必须得循环了,一句正则就出来你要的结果我暂时没想到有什么方法。
------解决方案--------------------
PHP code
$s = "1 2 3 4444";

//过滤空格的正则
echo preg_replace('/s+/', '', $s);//1234444

//过滤重复字符的正则
echo preg_replace('/(.)\1+/', '$1', $s);//1 2 3 4

//和在一起
echo preg_replace(array('/(s+)/', '/(.)\1+/'), array('', '$1'), $s);//1234
<br><font color="#e78608">------解决方案--------------------</font><br>preg_match_all("/([s*@#_)-])|((.)\3+)/", $psw, $r);<br>print_r($r);<br><br><br>Array<br>(<br>   [0] =&gt; Array<br>       (<br>           [0] =&gt; <br>           [1] =&gt; <br>           [2] =&gt; <br>           [3] =&gt; <br>           [4] =&gt; 11<br>           [5] =&gt; 	<br>           [6] =&gt; 11<br>           [7] =&gt; <br>           [8] =&gt; 11<br>           [9] =&gt; <br>           [10] =&gt; * <div class="clear"></div>
登录后复制
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号