Preg_Split Положить угловые скобки в массив [дубликат]

Это то, с чем я сталкиваюсь регулярно, & amp; Я обобщил приведенный выше сценарий Вольфганг для работы с любой ветвью

. Я также добавил приглашение «вы уверены», & amp; выход обратной связи

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# AT 2012-11-09
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
branchname=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
read -p "Reset branch $branchname to origin (y/n)? "
[ "$REPLY" != "y" ] || 
echo "about to auto-commit any changes"
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  echo "Creating backup auto-save branch: auto-save-$branchname-at-$timestamp"
  git branch "auto-save-$branchname-at-$timestamp" 
fi
echo "now resetting to origin/$branchname"
git fetch origin
git reset --hard origin/$branchname
19
задан skyline26 1 August 2012 в 12:42
поделиться

2 ответа

Здесь вы идете:

preg_split('/([^.:!?]+[.:!?]+)/', 'good:news.everyone!', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

Как это работает: шаблон фактически превращает все в разделитель. Затем, чтобы включить эти разделители в массив, вы можете использовать константу PREG_SPLIT_DELIM_CAPTURE. Это вернет массив вроде:

array (
    0 => '',
    1 => 'good:',
    2 => '',
    3 => 'news.',
    4 => '',
    5 => 'everyone!',
    6 => '',
);

Чтобы избавиться от пустых значений, используйте PREG_SPLIT_NO_EMPTY. Чтобы объединить две или более из этих констант, мы используем побитовый оператор |. Результат:

array (
    0 => 'good:',
    1 => 'news.',
    2 => 'everyone!'
);
43
ответ дан Elias Van Ootegem 18 August 2018 в 19:11
поделиться
  • 1
    +1 хороший ответ. – Jon Taylor 1 August 2012 в 13:10
  • 2
    отлично! очень спасибо за отличный ответ! – skyline26 1 August 2012 в 13:33
  • 3
    И что, если мне нужно разделить «хорошо»? как целое слово с:? И могу ли я также добавить & lt; strong & gt; Теги в? Так что мне нужно & lt; strong & gt; Хорошо: & lt; / strong & gt; – user1551496 5 March 2016 в 11:18
  • 4
    @ user1551496: Тогда вы имеете дело с разметкой. Используйте синтаксический анализатор вместо регулярного выражения, потому что regex не может обрабатывать разметку хорошо – Elias Van Ootegem 5 March 2016 в 13:40
  • 5
    Я до сих пор не понимаю, как это работает. – Nino Škopac 27 July 2017 в 16:06

Не использовать для PREG_SPLIT_DELIM_CAPTURE, если вы используете положительный lookbehind в своем шаблоне. Функция будет хранить разделители.

$text = preg_split('/(?<=[.:!?])/', 'good:news.everyone!', 0, PREG_SPLIT_NO_EMPTY);

Если вы используете lookbehind, он просто ищет символ без его соответствия. Таким образом, в случае preg_split() функция не будет отбрасывать символ.

Результат без флага PREG_SPLIT_NO_EMPTY:

array (
    0 => 'good:',
    1 => 'news.',
    2 => 'everyone!',
    3 => ''
);

Результат с флагом PREG_SPLIT_NO_EMPTY :

array (
    0 => 'good:',
    1 => 'news.',
    2 => 'everyone!'
);

Вы можете протестировать его с помощью этого PHP Online Function Tester .

4
ответ дан pmrotule 18 August 2018 в 19:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: