我有一个这样的字符串:
[numbers]firstword[numbers]mytargetstring
我想知道如何考虑以下内容来提取“targetstring”:
a。)数字是数字,例如,我的完整字符串,带数字:
12firstword21mytargetstring
b。)数字可以是任何数字,例如上面各有两位数,但它可以是任意数量的数字,如下所示:
123firstword21567mytargetstring
无论数字位数如何,我只对提取“mytargetstring”感兴趣。
顺便说一下,“firstword”是固定的,任何组合都不会改变。
我在Regex中不是很好,所以我感谢有背景的人可以建议如何使用PHP来做到这一点。非常感谢你。
答案 0 :(得分:2)
preg_match("/[0-9]+[a-z]+[0-9]+([a-z]+)/i", $your_string, $matches);
print_r($matches);
答案 1 :(得分:2)
这样做(或应该做)
$input = '12firstword21mytargetstring';
preg_match('/\d+\w+\d+(\w+)$/', $input, $matches);
echo $matches[1]; // mytargetstring
它分解为
\d+\w+\d+(\w+)$
\d+
- 一个或多个号码
\w+
- 后跟一个或多个单词字符
\d+
- 后跟一个或多个数字
(\w+)$
- 后跟一个或多个以字符串结尾的单词字符。括号将此标记为您要提取的组
答案 2 :(得分:2)
您可以使用preg_match和pattern syntax来完成此操作。
$string ='2firstword21mytargetstring';
if (preg_match ('/\d(\D*)$/', $string, $match)){
// ^ -- end of string
// ^ -- 0 or more
// ^^ -- any non digit character
// ^^ -- any digit character
var_dump($match[1]);}
答案 3 :(得分:1)
试试吧,
print_r(preg_split('/\d+/i', "12firstword21mytargetstring"));
echo '<br/>';
echo 'Final string is: '.end(preg_split('/\d+/i', "12firstword21mytargetstring"));
上进行测试
答案 4 :(得分:1)
你不需要正则表达式:
for ($i=strlen($string)-1; $i; $i--) {
if (is_numeric($string[$i])) break;
}
$extracted_string = substr($string, $i+1);
高于它可能是你可以获得更快的实现,当然比使用正则表达式更快,这对于这个简单的情况你不需要。
请参阅working demo
答案 5 :(得分:0)
你的简单解决方案就在这里: -
$keywords = preg_split("/[\d,]+/", "hypertext123language2434programming");
echo($keywords[2]);