Вывести определенную строку из URL из базы данных - PullRequest
0 голосов
/ 02 ноября 2019

Это пример URL из базы данных "fishPrice / 1572268723Career Portal.pdf". Я хочу напечатать только имя файла, которое называется "Портал карьеры". Каков наилучший способ сделать это?

I 'я пытался использовать preg_match, но я получаю "неопределенную ошибку смещения"

$fishPrice['price'] содержит URL

<?php

if(!empty($fishPrices))
{
    foreach ($fishPrices as $fishPrice)
    {
        $date = strtotime($fishPrice['Date']);
        $url = $fishPrice['price'];
        $pattern = "[0-9]/";
        preg_match('[0-9]', $url, $matches);
        $price = $matches[1];
        ?>

        <div class="">
            <div class="col-lg-6 col-lg-offset-0 col-md-8 col-md-offset-2 col-sm-12">
                <div class="container-outer">
                    <div class="container-inner ">
                        <div class="images-left">
                            <img src="http://via.placeholder.com/270x270" alt="girl-heart">
                        </div>
                        <div class="text-cont-right">
                            <div class="images-text">
                                <h3><a href="features-ecology.html"><?= date('M j Y', $date)?></a></h3>

                                <p><?= $price ?></p>
                            </div>
                            <div class="buttons">
                                <a href="admin/<?=$fishPrice['price']?>" class="green-btn green-btn-news">Read More</a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <?php

Ответы [ 3 ]

1 голос
/ 02 ноября 2019

Только с одной строкой образца точность шаблона является умозрительной.

Мое лучшее предположение: ( Демонстрация )

$input = "fishPrice/1572268723Career Portal.pdf";
echo preg_match("~\d{10}\K[^.]+~", $input, $out) ? $out[0] : 'fail';

Вывод:

Career Portal

Просто сопоставьте символы без точек после 10 цифр.

\K означает: забыть ранее подобранные символы или «сохранить» символы с этой точки. Это избавляет от необходимости использовать группу захвата.


Кроме того, вы можете использовать потенциально более надежную технику без регулярных выражений. Вот два: ( Demo2 )

echo ltrim(basename($input, '.pdf'), '0..9');
echo "\n---\n";
echo ltrim(pathinfo($input, PATHINFO_FILENAME), '0..9');

Вывод:

Career Portal
---
Career Portal

Изолировать имя файла, затем обрезать влево все цифры.

0 голосов
/ 02 ноября 2019

Хорошо, я работал над небольшим примером для вас.

$string = "fishPrice/1572268723Career Portal.pdf";

//Echo 1572268723Career Portal.pdf
$string =  substr($string, strpos($string, "/")+1);

while(is_numeric($string[0]))
{
     $string = substr($string, 1);
}

//Career Portal.pdf
echo $string;

Прежде всего, я должен всегда иметь подстроку в / с, как вы сказали. После этого я буду сокращать числа, пока не получу действительный символ, который будет началом имени. Надеюсь, это поможет!

0 голосов
/ 02 ноября 2019

Один подход, используя preg_match с группой захвата:

$input = "fishPrice/1572268723Career Portal.pdf";
preg_match("/.*\d{10}(.*)\.\w+$/", $input, $matches);
echo $matches[1];

Это печатает Career Portal. Логика регулярных выражений здесь состоит в том, чтобы захватывать все после последней десятизначной последовательности чисел, но до расширения файла.

...