Regex - Как фиксировать все итерации повторяющегося шаблона? [dубликат]

Вы можете использовать опцию --ignore-table. Таким образом, вы можете сделать

mysqldump -u USERNAME -pPASSWORD --ignore-table=database.table1 > database.sql

После -p нет пробелов (это не опечатка).

Если вы хотите игнорировать несколько таблиц, вы можете использовать простой скрипт как это

#!/bin/bash PASSWORD=XXXXXX HOST=XXXXXX USER=XXXXXX DATABASE=databasename DB_FILE=dump.sql EXCLUDED_TABLES=( table1 table2 table3 table4 tableN ) IGNORED_TABLES_STRING='' for TABLE in "${EXCLUDED_TABLES[@]}" do : IGNORED_TABLES_STRING+=" --ignore-table=${DATABASE}.${TABLE}" done echo "Dump structure" mysqldump --host=${HOST} --user=${USER} --password=${PASSWORD} --single-transaction --no-data ${DATABASE} > ${DB_FILE} echo "Dump content" mysqldump --host=${HOST} --user=${USER} --password=${PASSWORD} ${DATABASE} --no-create-info ${IGNORED_TABLES_STRING} >> ${DB_FILE}
3
задан bsruth 24 August 2009 в 17:47
поделиться

3 ответа

Нет, нет.

2
ответ дан Brian 15 August 2018 в 22:21
поделиться

Проблема в том, что желаемое решение настаивает на использовании групп захвата. C ++ предоставляет инструмент regex_token_iterator , чтобы лучше обрабатывать это (пример C ++ 11):

  #include & lt; iostream & gt;  #include & lt; string & gt;  #include & lt; regex & gt;  использование пространства имен std;  int main () {std :: regex e (R "((?: ^ - Числа)? \ s * (\ d +))");  ввод строки;  while (getline (cin, input)) {std :: regex_token_iterator & lt; std :: string :: iterator & gt;  a {input.begin (), input.end (), e, 1, regex_constants :: match_continuous};  станд :: regex_token_iterator & Lt; станд :: строка :: итератор & GT;  конец;  в то время как (a! = конец) {cout & lt;  & lt;  "-";  ++ а;  } cout & lt;  '\n';  } return 0;  }  

https://wandbox.org/permlink/TzVEqykXP1eYdo1c

0
ответ дан Marek R 15 August 2018 в 22:21
поделиться
  • 1
    Но у вас нет повторяющейся группы в этом примере регулярного выражения – Vladimir 2 August 2018 в 13:44

Я собирался задать этот один и тот же вопрос, и я нашел решение.

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

" есть четыре огня: «

и

« капитан-пикард - это бомба »

Вы можете подумать, что решение:

  / ((\ w +) \ s?) + /  

Но это будет соответствовать только всей входной строке и последней захваченной группе.

Что вы можете do использует переключатель «g».

Итак, пример в Perl:

  use strict;  использовать предупреждения;  my $ str1 = "есть четыре огня";  мой $ str2 = «капитан-пикард - это бомба»;  foreach ($ str1, $ str2) {my @a = ($ _ = ~ / (\ w +) \ s? / g);  print "захваченных групп:".  join ("|", @a).  "\n";  }  

Вывод:

  захваченных групп: есть | четыре | огни захваченных групп: captain | picard | is | the | bomb [  ! d2] 

Итак, есть решение, если ваш язык выбора поддерживает эквивалент «g» (и я думаю, что большинство из них ...).

Надеюсь, это поможет кому-то который был в том же положении, что и я!

S

0
ответ дан wawawawa 15 August 2018 в 22:21
поделиться
Другие вопросы по тегам:

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