#php #regex #preg-replace
#php #регулярное выражение #preg-заменить
Вопрос:
Кажется, я не могу найти регулярное выражение для сопоставления с любой строкой в формате
**(anything that's not **)**
Я пытался сделать это на php
$str = "** hello world * hello **";
$str = preg_replace('/**(([^*][^*] ))**/s','<strong>$1</strong>',$str);
но замена строки не была выполнена.
Ответ №1:
Вы можете использовать утверждение ?!
в паре с символьным .
заполнителем:
= preg_replace('/**(((?!**).) )**/s',
По сути, это означает сопоставление любого количества чего угодно (.)
, но .
никогда не может занимать место **
Ответ №2:
Вы могли бы использовать отложенное сопоставление
**(. ?)**
# "find the shortest string between ** and **
или жадный
**((?:[^*]|*[^*]) )**
# "find the string between ** and **,
# comprising of only non-*, or a * followed by a non-*"
Ответ №3:
Это должно сработать:
$result = preg_replace(
'/** # Match **
( # Match and capture...
(?: # the following...
(?!**) # (unless there is a ** right ahead)
. # any character
)* # zero or more times
) # End of capturing group
** # Match **
/sx',
'<strong>1</strong>', $subject);
Ответ №4:
preg_replace( '/**(.*?)**/', '<strong>$1</strong>', $str );
Ответ №5:
Попробуйте с:
$str = "** hello world * hello **";
$str = preg_replace('/**(.*)**/s','<strong>$1</strong>',$str);
Комментарии:
1.
.*
также, к счастью, совпадет**
.2. да, но не последнее из них — я думаю, это то, что ему нужно
3. Подумайте
**This is important** this isn't important **but this is**
— ваше регулярное выражение будет соответствовать всей строке, а не только «важным» битам.4. это верно, но в его первом примере, я думаю, что также закрытие) должно быть выделено жирным шрифтом