求一个正则表达式的写法 你到底想说什么呢?有-的属于2?没有-的属于1?是的^(.*)([^\-0-9]+)\.html$这样写不通过语法报错了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /^[A-Za-z\d]+\.\d\.html$/;匹配test1.1.html 我的意思是除了第二^(.*)-([0-9]+)\.html$以外的都到第一正则/^[A-Za-z\d]+\.\d\.html$/;匹配test1.1.html虽配置test1.1.html但是将原来的test.html已经不能生效,而且原来还可以test-jdf-test.html等 $s1 = "test-test-f.html"; //or //$s1 = "test111.1.html"; //or//$s1 = "test.html";$s2 = "test-1000.html";if(preg_match("/.*?-?[^\d]+/",$s1)){ echo "Match 1 \n"; }if(preg_match("/.*?-[\d]+/",$s2)){ echo "Match 2 \n"; } preg_match("/.*?-?[^\d]+/",$s1) 连s2也匹配了 $s1 = "test-test-f.html"; //or //$s1 = "test111.1.html"; //or//$s1 = "test.html";$s2 = "test-1000.html";if(preg_match("/.*?-?[^\d]+\.html/",$s2)){echo "Match 1 \n";}if(preg_match("/.*?-[\d]+\.html/",$s2)){echo "Match 2 \n";} 上述的当$s1 = "test111.1.html";或$s1 = "test111.html";preg_match("/.*?-?[^\d]+\.html/",$s1)通不过 1.test.html2.test-10000.html请给出1,2的规律规则来。 格式1为 文件名.html格式2为 文件名-数字.html两者的区别在格式2 多了一个"-数字"其中文件名是合法的文件格式可以是test2.html test-uer-ss.html test-usb1.1.html <?php$s2="wwww-10.html";//$s2="wwww-ww.html";if(preg_match("/(.*)-[\d]+\.html/",$s2)){ echo "是2类型";}else{ echo "不是2";}?> 不能用else,必须要写两个正则表达式 现在1的正则是这样写^(?!.*-\d+\.html$).*\.html$ <?php$re="/^(.+)\.html$/";$s="test1.1.html";preg_match($re,$s,$out);echo $out[0];?>---------- 程序调试结果 ----------test1.1.htmlOutput completed (0 sec consumed) - Normal Termination 还是不行呀//$s1 = "test-test-f.html"; //or $s1 = "test111.1.html"; //or//$s1 = "test.html";$s2 = "test-1000.html";if(preg_match("/^(.+)\.html$/",$s2)){echo "Match 1 \n";}if(preg_match("/.*?-[\d]+\.html/",$s2)){echo "Match 2 \n";}必须要能判断下列规则格式1为 文件名.html格式2为 文件名-数字.html两者的区别在格式2 多了一个"-数字"其中文件名是合法的文件格式可以是test2.html test-uer-ss.html test-usb1.1.html test-22-ss.html属于哪种格式?test-ss-22.html又属于哪种格式?你把需求描述清楚一点吧. test-22-ss.html属于哪种格式? 属第一种test-ss-22.html又属于哪种格式? 属第二种 关键在于要去匹配包含数字也包含其他字符的为第一种包含数字不包含其他字符的为第二种。我还没想到怎么处理才能判断出第一种情况而非第二种情况。不过有个变通的方法:<?php$str = 'test2.html test-uer-ss.html test-usb1.1.html test-333222.html';preg_match_all("/[^\s]*?-[\d]*?.html/isU",$str,$arrStr1);preg_match_all("/[^\s]*?.html/isU",$str,$arrStr2);?>然后从$arrStr2中排除$arrStr1的情况。 <script type="text/javascript">function num1(s) { var p = /^[a-z\d]+((-[a-z\d]+)*(-[a-z]+|(-\d+)))*\.html$/i; var j = p.exec(s)? (RegExp.$4? "第二种": "第一种"): "第三种^o^"; alert(j);}num1("test-22-ss.html");num1("test-ss-22.html");num1("test.html");num1("test-10000.html");num1("不成立");</script> 格式1为 文件名.html格式2为 文件名-数字.html两者的区别在格式2 多了一个"-数字"如果你这样说的话。那么利用非贪婪特性即可<script type="text/javascript">function num1(s) { //var p = /^[a-z\d]+((-[a-z\d]+)*(-[a-z]+|(-\d+)))*\.html$/i; //比较严格的说 var p = /^[^\\\/\:\*\?\"<>\|\.][^\\\/\:\*\?\"<>\|]+?(-\d+)?\.html$/i; var j = p.exec(s)? (RegExp.$1? "第二种": "第一种"): "第三种^o^"; alert(j);}num1("test-22-ss.html");num1("test-ss-22.html");num1("test.html");num1("test-10000.html");num1("传说中的-WC.html");num1("不成立");</script> var p = /^[^\\\/\:\*\?\"<>\|]+?(-\d+)?\.html$/i;晕。。没仔细看这个修改下 早就写好,只要一个正向查找,尾数非"-数字.html"的就是第一种.^(?!.*-\d+\.html$).*\.html$“回复楼上的,这个表达式根本通不过”通不过的原因只可能你的语言PHP中有点小区别,注意了解一下有没有特别字符。在JS下绝对可以的。 /^[^\\\/\:\*\?\"\<\>\|\.][^\\\/\:\*\?\"\<\>\|]*?(-\d+)?\.html$/i;//(i设置不区分大小写)//文件名里不包括\ / : * ? < > |//而且文件名的开头也不能为.//所以这个式子应该没问题啊。。*?(-\d+)? ,因为第一种后面没-数字所以,*?将匹配所有。如果是第二种则会匹配-\d+,因为*?设置有非贪婪,所以捕获到的$1就有值啦。。//即判断$1有无值即可分辨是哪种应该没问题的吧?思路很清楚的啊。^o^多加几个转议呢?忽忽,不懂PHP看这个问题晃悠了好几天了 muxrwc(王辰)是正则高手,我看你写的正则好几天了.谢谢! php中进行mysql交叉查询 求一个简单正规 高分求解取值问题 求助!!?? 地址栏里网址前边会有一个小图片,请问怎么添加这个图片 php.ini 问个常见的问题 mysql需要什么哪些驱动程序 关于jpg图像显示和扩展模块的问题 CURL无法请求本地 图片上传 SESSION参数中的cache_expire和gc_maxlifetime是什么区别?
匹配
test1.1.html
以外的都到第一正则/^[A-Za-z\d]+\.\d\.html$/;
匹配
test1.1.html
虽配置test1.1.html但是将原来的test.html已经不能生效,而且原来还可以test-jdf-test.html等
//$s1 = "test111.1.html"; //or
//$s1 = "test.html";$s2 = "test-1000.html";
if(preg_match("/.*?-?[^\d]+/",$s1))
{
echo "Match 1 \n";
}
if(preg_match("/.*?-[\d]+/",$s2))
{
echo "Match 2 \n";
}
//$s1 = "test111.1.html"; //or
//$s1 = "test.html";$s2 = "test-1000.html";
if(preg_match("/.*?-?[^\d]+\.html/",$s2))
{
echo "Match 1 \n";
}
if(preg_match("/.*?-[\d]+\.html/",$s2))
{
echo "Match 2 \n";
}
$s1 = "test111.1.html";
或
$s1 = "test111.html";
preg_match("/.*?-?[^\d]+\.html/",$s1)通不过
2.test-10000.html请给出1,2的规律规则来。
格式2为 文件名-数字.html两者的区别在格式2 多了一个"-数字"其中文件名是合法的文件格式可以是test2.html test-uer-ss.html test-usb1.1.html
$s2="wwww-10.html";
//$s2="wwww-ww.html";
if(preg_match("/(.*)-[\d]+\.html/",$s2))
{
echo "是2类型";
}else
{
echo "不是2";
}
?>
^(?!.*-\d+\.html$).*\.html$
$re="/^(.+)\.html$/";
$s="test1.1.html";
preg_match($re,$s,$out);
echo $out[0];
?>---------- 程序调试结果 ----------
test1.1.html
Output completed (0 sec consumed) - Normal Termination
//$s1 = "test-test-f.html"; //or
$s1 = "test111.1.html"; //or
//$s1 = "test.html";$s2 = "test-1000.html";
if(preg_match("/^(.+)\.html$/",$s2))
{
echo "Match 1 \n";
}
if(preg_match("/.*?-[\d]+\.html/",$s2))
{
echo "Match 2 \n";
}必须要能判断下列规则
格式1为 文件名.html
格式2为 文件名-数字.html两者的区别在格式2 多了一个"-数字"其中文件名是合法的文件格式可以是test2.html test-uer-ss.html test-usb1.1.html
test-ss-22.html又属于哪种格式?
你把需求描述清楚一点吧.
test-ss-22.html又属于哪种格式? 属第二种
包含数字不包含其他字符的为第二种。我还没想到怎么处理才能判断出第一种情况而非第二种情况。不过有个变通的方法:<?php
$str = 'test2.html test-uer-ss.html test-usb1.1.html test-333222.html';
preg_match_all("/[^\s]*?-[\d]*?.html/isU",$str,$arrStr1);
preg_match_all("/[^\s]*?.html/isU",$str,$arrStr2);
?>然后从$arrStr2中排除$arrStr1的情况。
function num1(s) {
var p = /^[a-z\d]+((-[a-z\d]+)*(-[a-z]+|(-\d+)))*\.html$/i;
var j = p.exec(s)? (RegExp.$4? "第二种": "第一种"): "第三种^o^";
alert(j);
}
num1("test-22-ss.html");
num1("test-ss-22.html");
num1("test.html");
num1("test-10000.html");
num1("不成立");
</script>
格式2为 文件名-数字.html
两者的区别在格式2 多了一个"-数字"
如果你这样说的话。那么利用非贪婪特性即可
<script type="text/javascript">
function num1(s) {
//var p = /^[a-z\d]+((-[a-z\d]+)*(-[a-z]+|(-\d+)))*\.html$/i;
//比较严格的说
var p = /^[^\\\/\:\*\?\"<>\|\.][^\\\/\:\*\?\"<>\|]+?(-\d+)?\.html$/i;
var j = p.exec(s)? (RegExp.$1? "第二种": "第一种"): "第三种^o^";
alert(j);
}
num1("test-22-ss.html");
num1("test-ss-22.html");
num1("test.html");
num1("test-10000.html");
num1("传说中的-WC.html");
num1("不成立");
</script>
晕。。没仔细看这个
修改下
//文件名里不包括\ / : * ? < > |
//而且文件名的开头也不能为.
//所以这个式子应该没问题啊。。*?(-\d+)? ,因为第一种后面没-数字所以,*?将匹配所有。如果是第二种则会匹配-\d+,因为*?设置有非贪婪,所以捕获到的$1就有值啦。。
//即判断$1有无值即可分辨是哪种应该没问题的吧?思路很清楚的啊。^o^多加几个转议呢?
忽忽,不懂PHP看这个问题晃悠了好几天了