要求比较高的正则表达式 用php正则挑选出 数字从小到大 和 字母从a - z 顺序的 ...例如:0189 agh 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 从哪挑选,字符串里还是URL地址或者某个文本文件里?? 就比如一个 长的字符串和文章 挑选出 123 654 987 abd zyx 456能把123 abd 456 挑选出来 如果非要用一条正则就穷举吧/01|02|03|04|05|……|0123456789|ab|ac|ad……/哇咔咔……我想没人这样做吧?呃,貌似穷举也不行,正则有匹配数量限制? 这有什么特别规律不??我实现在看不出。结果可否 123 6 9 abd z 这不是只用正则就可解决的$s = '123 654 987 abd zyx 456';//能把123 abd 456 挑选出来$p = array( '/(\w)(\w)/e', '/\W+\w\W+/',);$r = array( '"$1"<"$2"?"$1$2":" $2"', ' ',);while($s != ($t = preg_replace($p, $r, $s))) $s = $t;echo $s;123 abd 456 '/(\w)(\w)/e', '/\W+\w\W+/', 这是具体是什么意思 能不能给我详细解释一下啊?/\W+\w\W+/ 什么也匹配不到啊? 还有那个"$1"<"$2"?"$1$2":" $2" " $2" 是有什么作用? 要连起来看'/(\w)(\w)/e', '"$1"<"$2"?"$1$2":" $2"'规则:连续的两个字母数字替换:第一个小于第二个,一并返回,否则删去第一个因为替换是表达式,所以要附加e扩展'/\W+\w\W+/', ' '规则:被若干非字母数字包围的单个字母数字替换:单个空格使用循环while($s != ($t = preg_replace($p, $r, $s))) $s = $t;的原因是:在大多情况下需要多次替换才能完成循环终止的条件是 $s 不再被替换(原串与替换后的串相同) 微瑕疵:'/\W+\w\W+/',是不能替换开头或结尾单个字符的投机的办法:while($s != ($t = preg_replace($p, $r, $s))) $s = ' ' . $t . ' ';或修改上面的正则 大部分都了解了,但是还有一个疑问:(\w)(\w) 和 "$1"<"$2"?"$1$2":" $2" 就先匹配第一次 123 第二次把654 中的 54取出来 然后就 87 abd yx 456,然后利用while 进行替换, 但是 /\W+\w\W+/ 在字符串里面没有匹配的字符 就不能替换成空格,我就是不知道/\W+\w\W+/ 是怎么起作用的 ... 但不放这个结果还不对 怎么会没有呢?为了便于理解,你可以在循环中输出一下 $s$s = '123 654 987 abd zyx 456';//能把123 abd 456 挑选出来$p = array( '/(\w)(\w)/e', '/\W+\w\W+/',);$r = array( '"$1"<"$2"?"$1$2":" $2"', ' ',);while($s != ($t = preg_replace($p, $r, $s))) { $s = $t; echo "$s </br>";}echo $s;得到123 54 87 abd yx 456 123 7 abd 456 123 abd 456 123 abd 456 FCK 上传成功后的提示 使用PHP+Sphinx建立高效的站内搜索引擎 横向输出数据php可以实现么 同一文件两种方式访问效果不一样 frame问题,左栏是个父窗口,点下里面的退出,父窗口变化,子窗口也变化 <!DOCTYPE 与 随之窗口滚动 不兼容 问题!! 急急急急急急 无法删除PHP环境软件!求救~ 求一正则.匹配超级连接的. 关于表单提交後的变量问题 请教各位大神改版后的四六级总分怎么用正则表达式获取(旧版的我会获取) 怎样实输入框的条件显示(有时候能输入有时候不能输入) 请问PHP 5.3.0应该用什么版本的ZEND DEBUGGER?
这有什么特别规律不??
我实现在看不出。结果可否 123 6 9 abd z
$s = '123 654 987 abd zyx 456';
//能把123 abd 456 挑选出来$p = array(
'/(\w)(\w)/e',
'/\W+\w\W+/',
);$r = array(
'"$1"<"$2"?"$1$2":" $2"',
' ',
);while($s != ($t = preg_replace($p, $r, $s))) $s = $t;
echo $s;123 abd 456
'/(\w)(\w)/e',
'/\W+\w\W+/', 这是具体是什么意思 能不能给我详细解释一下啊?/\W+\w\W+/ 什么也匹配不到啊? 还有那个"$1"<"$2"?"$1$2":" $2" " $2" 是有什么作用?
'/(\w)(\w)/e', '"$1"<"$2"?"$1$2":" $2"'
规则:连续的两个字母数字
替换:第一个小于第二个,一并返回,否则删去第一个
因为替换是表达式,所以要附加e扩展
'/\W+\w\W+/', ' '
规则:被若干非字母数字包围的单个字母数字
替换:单个空格使用循环
while($s != ($t = preg_replace($p, $r, $s))) $s = $t;
的原因是:在大多情况下需要多次替换才能完成
循环终止的条件是 $s 不再被替换(原串与替换后的串相同)
大部分都了解了,但是还有一个疑问:(\w)(\w) 和 "$1"<"$2"?"$1$2":" $2" 就先匹配第一次 123 第二次把
654 中的 54取出来 然后就 87 abd yx 456,然后利用while 进行替换, 但是 /\W+\w\W+/ 在字符串里面没有匹配的字符 就不能替换成空格,我就是不知道/\W+\w\W+/ 是怎么起作用的 ... 但不放这个结果还不对
为了便于理解,你可以在循环中输出一下 $s
$s = '123 654 987 abd zyx 456';
//能把123 abd 456 挑选出来$p = array(
'/(\w)(\w)/e',
'/\W+\w\W+/',
);$r = array(
'"$1"<"$2"?"$1$2":" $2"',
' ',
);while($s != ($t = preg_replace($p, $r, $s))) {
$s = $t;
echo "$s </br>";
}
echo $s;得到
123 54 87 abd yx 456
123 7 abd 456
123 abd 456
123 abd 456