2015-11-30 3 views
1

Я пытаюсь создать регулярное выражение для поиска SD-NNNNN (где N является числом) в любом месте записи, чтобы я мог превратить это в гиперссылку.Создание регулярного выражения для функции в PHP

Значит, вы знаете, что я пытаюсь сделать, это простая запись в базе данных, содержащая комментарии о чем-то, что было сделано в течение дня, комментарий может содержать ссылку на билет, которую я пытаюсь получить так что он может указать URL-адрес билета.

Мне кажется, что я не вижу головы вокруг регулярного выражения, так что до сих пор у меня нет радости, даже не уверен, что это правильный способ сделать что-то.

Вот мой текущий код:

$cRow = current($row); 
if ($cRow == "INSERT REGEX/PREG_MATCH/WHATEVER) { 
    $regex = "<a href='http://something.com/search/$regex'>$regex</a>"; 
} 

echo "<td style='word-wrap: break-word'>$cRow</td>"; 
next($row); 
$y++; 

Полностью еще не закончена, но основная идея заключается в том, что $ c_row может быть что угодно, но если она содержит SD-NNNNN, то было бы только заменить SD-NNNNN с гиперссылка, назвав ее тем же самым.

Любой, кто может мне помочь?

Комментарий не форматирует код очень хорошо, поэтому здесь обновление:

Это то, что я пробовал:

$c_row = current($row); 
$str = "<a href='https://example.com/browse/"; 
$regex = "/^SD-\d{5}/"; 
if (preg_match($regex, $c_row) 
{ 
    $c_row = preg_replace($regex, $str$0, $c_row); 
} 
echo "<td style='word-wrap: break-word'>" . $c_row . '</td>'; 
next($row); 
$y = $y + 1 

Что дает мне ошибку 500 для {под если.

+1

'preg_match ('/ SD- \ d {5} /', $ str);'? – Jan

+0

Прямо сейчас, вопрос слишком неясен. Пожалуйста, укажите больше контекста. Понятно, что вы хотите сопоставить некоторый текст «SD-xxxxx» в некотором HTML. Я предлагаю использовать DOMDocument с DOMXPath для получения текстовых узлов и делать необходимые замены только внутри них. –

+0

@stribizhev, вопрос был обновлен, чтобы показать, что я пытаюсь сделать –

ответ

0

Это будет соответствовать «SD-», а затем пять чисел:

$str = "SD-12345"; 
$regex = "/SD-\d{5}/"; (put a caret^before, to match it in the beginning) 
if (preg_match($regex, $str) { 
    // do sth 
} 
// will match: SD-12345, will not match: SD-123456 

Если вы хотите, чтобы заменить его, вы можете использовать следующий код:

$str = "SD-12345"; 
$regex = "/(SD-\d{5})/"; 
$replacement = ""; 
preg_replace($regex, $replacement, $str); 
// will replace SD-12345 with "" 

Как @stribizhev указал возможно, вы пытаетесь сопоставить HTML-элементы, для этой цели синтаксический анализатор (например, SimpleXML) будет в любом случае более подходящим. Вопрос остается несколько расплывчатым.

+0

Он будет соответствовать 'SD-00000' в' OSD-00000000000000000000'. –

+0

@стрибижев: Правда, но ОП был неяснее. – Jan

+0

Еще одно потенциальное узкое место: замена, скорее всего, произойдет в HTML-коде. Regex не лучший друг здесь, а ваш OP рискует создать узел внутри значения атрибута. –

Смежные вопросы