регулярное выражение PHP; извлечь первый совпадающий идентификатор в шорткоде WordPress

Имея эту строку

$string = '[gallery link="file" ids="501,502,503,504,505,506,507,508,509"]';

Как я могу извлечь первый идентификатор в идентификаторах?

До сих пор мне удалось извлечь все идентификаторы, а затем использовать разделение;

$output = preg_match_all('/\[gallery.+ids=[\'"](.+?)[\'"]\]/', $string, $matches);
list($extracted) = split(',', $matches[1][0]);

Должно быть что-то более простое, использующее только регулярное выражение, верно?

Спасибо :)


person numediaweb    schedule 17.07.2014    source источник


Ответы (3)


Вы можете попробовать приведенное ниже регулярное выражение, чтобы оно соответствовало первому идентификатору в идентификаторе,

\[gallery.+ids=\"\K[^,]*

OR

\[gallery.+ids=\"\K\d+

ДЕМО

Ваш PHP-код будет,

<?php
$string = '[gallery link="file" ids="501,502,503,504,505,506,507,508,509"]';
$pattern = '~\[gallery.+ids="\K([^,]*)~';
if (preg_match($pattern, $string, $m)) {
    $yourmatch = $m[0]; 
    echo $yourmatch;
    }
?> //=> 501
person Avinash Raj    schedule 17.07.2014
comment
Это было так быстро! Спасибо - person numediaweb; 17.07.2014

Как я могу извлечь первый идентификатор в идентификаторах?

Получить совпадающую группу из индекса 1.

\bids="(\d+)

Вот DEMO


ИЛИ попробуйте с позитивным просмотром назад

(?<=\bids=")\d+

Вот ДЕМО

Образец кода:

$re = "/(?<=\\bids=\\")\\d+/";
$str = "[gallery link=\"file\" ids=\"501,502,503,504,505,506,507,508,509\"]";

preg_match_all($re, $str, $matches);
person Braj    schedule 17.07.2014

Все, что вы здесь пытаетесь, выглядит странно. Вам не нужны регулярные выражения, чтобы получить параметры шорткода. Вместо этого используйте стандартную встроенную функцию Wordpress.

Пример с codex.wordpress.org:

// [bartag foo="foo-value"]
function bartag_func( $atts ) {
    $a = shortcode_atts( array(
        'foo' => 'something',
        'bar' => 'something else',
    ), $atts );

    return "foo = {$a['foo']}";
}
add_shortcode( 'bartag', 'bartag_func' );

См.: Кодекс Wordpress — API шорткодов

Обновить — получить первый идентификатор:

// [gallery link="file" ids="501,502,503,504,505,506,507,508,509"]
function gallery_shortcode( $atts ) {
    $atts = shortcode_atts( array(
        'link' => 'file',
        'ids' => array(),
    ), $atts );

    $ids = explode( ',', $atts );

    // strip the first ID from the array…
    $first_id = array_shift( $ids );
    // …or just select it
    $first_id = $ids[0];

    return $first_id;
}
add_shortcode( 'gallery', 'gallery_shortcode' );
person feeela    schedule 17.07.2014
comment
Я не пытаюсь добавить шорткод, как указано в вашем комментарии add_shortcode() Я пытаюсь разобрать шорткод, который плагин встраивает в контент публикации; $post->post_content .. принятое выше решение работает хорошо, спасибо :) - person numediaweb; 18.07.2014
comment
@numediaweb add_shortcode уже выполняет весь синтаксический анализ — для этого и предназначена эта функция. - person feeela; 18.07.2014
comment
Итак, исходя из вашего ответа; есть идеи, как извлечь первый идентификатор из [gallery link="file" ids="501,502,503,504,505,506,507,508,509"] с помощью add_shortcode()? - person numediaweb; 18.07.2014
comment
Мне нужен идентификатор до запуска этого метода, чтобы я мог создать условный CSS и правильно встроить его в голову. - person Jacob Raccuia; 02.05.2017