如何在字符串匹配后返回部分PHP字符串?

时间:2011-03-22 00:24:02

标签: php string wordpress url

我想从URL字符串返回页面ID。

例如,如果我有这个:

    <?php
    $string = "foobar.com/?page_id=20"; // <-dynamically generated

    $new_string = some_function($string, get stuff after 'page_id='); // (need to know what function to use and how)

    // I want to get this:
    echo $new_string; //($new_string = "20";)
?>

///更新!

如果我当前在该页面或其中一个孩子上,我正在尝试向链接添加一个类。这是我得到的:

<?php
$items = wp_get_nav_menu_items("navigation");
$counter = 1;
foreach($items as $item): ?>
<a id="mainnav<?php echo $counter; ?>" class="
<?php
//home
$theurl = $item->url;
$new_string = modify_withfunction("after page_id=", $theurl);

if ($new_string == $page->post_parent || $new_string == $page->ID) {
echo 'currentnav';
}
?>
" href="<?php echo $item->url; ?>"><?php echo $item->title; ?></a>
<?php 
$counter++;
endforeach;
?>

4 个答案:

答案 0 :(得分:1)

未经测试,但此代码应该执行:

function get_pageid($str){
    preg_match("/page_id=(\d+)?/", $str, $matches);
    return $matches[0];
}

但是,那只能用于你想要提取的ID是一系列数字。如果格式不同,您需要修改正则表达式以匹配格式。

答案 1 :(得分:1)

您有两种选择。从字符串中提取内容通常是正则表达式的任务。当你意识到你可以注意到一个固定的字符串部分,以及你想要的一个占位符({{1>} d ecimals)时,它们很简单:

\d+

或者,如果它是一个URL字符串,那么这也是可能的:

preg_match('/page_id=(\d+)/', $str, $match);
print $match[1];

答案 2 :(得分:1)

如果您不想使用正则表达式。

你可以看一下:

以下是一些示例代码:

<?php
parse_str(parse_url('foobar.com/?page_id=20', PHP_URL_QUERY));
var_dump($page_id);

答案 3 :(得分:0)

因为你已经在你的问题中添加了wordpress标签。

wordpress提供$wp_query对象,该对象具有名为query_vars

的属性
if(isset($wp_query->query_vars['page_id'])) {
    $page_id = urldecode($wp_query->query_vars['page_id']);
}