1

我有一个这样的字符串:

[numbers]firstword[numbers]mytargetstring

我想知道如何在考虑以下因素的情况下提取“targetstring”:

a.)数字是数字,例如,我的完整字符串带有数字:

12firstword21mytargetstring

b.) 数字可以是任何数字,例如上面的每个数字都是两位,但它可以是任何数字,如下所示:

123firstword21567mytargetstring

不管位数多少,我只对提取“mytargetstring”感兴趣。

顺便说一句,“firstword”是固定的,不会随任何组合而改变。

我在正则表达式方面不是很好,所以我很感激有强大背景的人可以建议如何使用 PHP 来做到这一点。太感谢了。

4

6 回答 6

2
preg_match("/[0-9]+[a-z]+[0-9]+([a-z]+)/i", $your_string, $matches);
print_r($matches);
于 2013-06-24T07:26:19.667 回答
2

这会做(或应该做)

$input = '12firstword21mytargetstring';

preg_match('/\d+\w+\d+(\w+)$/', $input, $matches);

echo $matches[1]; // mytargetstring

它分解为

\d+\w+\d+(\w+)$

\d+- 一个或多个数字

\w+- 后跟 1 个或多个单词字符

\d+- 后跟 1 个或多个数字

(\w+)$- 后跟 1 个或多个结束字符串的单词字符。括号将此标记为您要提取的组

于 2013-06-24T07:26:37.367 回答
2

您可以使用preg_match模式语法来做到这一点。

$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]);}
于 2013-06-24T07:27:50.673 回答
1

试试看,

print_r(preg_split('/\d+/i', "12firstword21mytargetstring"));
echo '<br/>';
echo 'Final string is: '.end(preg_split('/\d+/i', "12firstword21mytargetstring"));

在http://writecodeonline.com/php/上测试

于 2013-06-24T07:30:03.153 回答
1

你不需要正则表达式:

for ($i=strlen($string)-1; $i; $i--) {
   if (is_numeric($string[$i])) break; 
}

$extracted_string = substr($string, $i+1);

上面它可能是您可以获得的更快的实现,当然比使用正则表达式更快,对于这个简单的情况,您不需要它。

查看工作演示

于 2013-06-24T07:30:57.237 回答
0

您的简单解决方案在这里:-

$keywords = preg_split("/[\d,]+/", "hypertext123language2434programming");
echo($keywords[2]);
于 2013-06-24T07:30:37.407 回答