Regex для проверки существования строки в другой строке - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь увидеть существование /target- в строке /dir1/dir2/dir3/dir4/../dir7/dir8/dir9/target-.a-word1-word2-alphanumberic1-alphanumberic2.md).

$re = '/^(.*?)(\/target-)(.*?)(\.md)$/i';
$str = '/dir1/dir2/dir3/dir4/../dir7/dir8/dir9/target-.a-word1-word2-alphanumberic1-alphanumberic2.md';

preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);

// Print the entire match result
var_dump($matches);

Демо: https://regex101.com/r/Saxk8x/1

Использую ли я preg_match или preg_match_all или есть ли более быстрый или простой способ сделать это?

Оба preg_match или preg_match_all возвращают ноль, даже если демо работает правильно.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Поскольку stripos и strpos быстрее, чем регулярное выражение, вот простая рабочая демонстрация RegEx.

Отрывок

$re = '/\/target\-/';
$str = '/dir1/dir2/dir3/dir4/../dir7/dir8/dir9/target-.a-word1-word2-alphanumberic1-alphanumberic2.md';

if(preg_match($re, $str, $match)){
echo $match[0].' found';
}else{
echo 'Aww.. No match found';
}

Проверьте демо здесь

Примечание: если вы хотите проверить только одно вхождение, лучше использовать preg_match, а не preg_match_all.

Подробнее о preg_match

0 голосов
/ 09 января 2019

Если вам просто нужно найти точную строку /target-, вы можете использовать strpos() (stripos(), если вы хотите поиск без учета регистра). Это будет быстрее, чем лучшее регулярное выражение.

$pos = strpos($str, '/target-');
if ($pos !== false) {
    var_dump($pos);
}
...