我正在尝试获取与原始字符串匹配的字符串,最后是数字。
我收到了这些字符串:
mod_courts2
mod_courts_config
mod_courts_config2
从这些字符串中我想要的是一个只与“mod_courts”匹配的字符串,最后是数字。
我这样做:
if (strpos($t, "mod_courts") !== FALSE) {
preg_match('/^\w+(\d+)$/U', $t, $match);
echo $match;
}
这会返回"mod_courts2"
和"mod_courts_config2"
,我只想"mod_courts2"
答案 0 :(得分:2)
使用以下正则表达式:
/^[a-z]+_[a-z]+(\d+)$/
<强>解释强>
^
- 在字符串开头处断言位置[a-z]+
- 匹配任何字母表一次或多次_
- 匹配字面的非字符字符[a-z]+
- 匹配任何字母表一次或多次(\d+)
- 匹配(并捕获)0到9之间的任何数字一次或多次$
- 在字符串末尾断言位置测试用例:
$array = array(
'mod_courts2',
'mod_courts_config',
'mod_courts_config2'
);
foreach ($array as $string) {
if(preg_match('/^[a-z]+_[a-z]+(\d+)$/i', $string, $matches)) {
print_r($matches);
}
}
<强>输出:强>
Array
(
[0] => mod_courts2
[1] => 2
)
答案 1 :(得分:1)
很简单,你可以这样做:
/^(mod_courts\d+)$/
但是,如果您想要以下格式:sometext_somettext2
,则可以使用以下正则表达式:
/^([a-zA-Z]+_[a-zA-Z]+\d+)$/
或
/^([^_]+_[^_]+\d+)$/
http://regex101.com/r/jP8iC1
http://regex101.com/r/tI1uX8
http://regex101.com/r/fX8pO5
答案 2 :(得分:1)
^mod_courts\d+$
这应该做到
答案 3 :(得分:1)
你可以使用
^mod_courts[0-9]+$
意思是mod_courts
后跟一个数字(只有那个,感谢^$
匹配字符串的开头和结尾)。无需strpos
检查。