我正在尝试获取与原始字符串和最终数字匹配的字符串。
我得到了这些字符串:
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"
使用以下正则表达式:
/^[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
)
很简单,你可以做到:
/^(mod_courts'd+)$/
但是,如果您只想要以下格式:sometext_somettext2
,则可以使用以下正则表达式:
/^([a-zA-Z]+_[a-zA-Z]+'d+)$/
or
/^([^_]+_[^_]+'d+)$/
演示
http://regex101.com/r/jP8iC1http://regex101.com/r/tI1uX8http://regex101.com/r/fX8pO5
^mod_courts'd+$
这应该做到
你可以
只使用
^mod_courts[0-9]+$
含义mod_courts
后跟一个数字(仅此而已,这要归功于^$
匹配字符串的开头和结尾)。无需strpos
检查。