PHP preg_split между символом (префиксом) и числом [дубликата]

Эта же проблема возникает со мной, но с другим использованием. Когда я попытался обернуть функцию API с помощью 2 декораторов:

  1. @ app.route ()
  2. Мой костюм @exception_handler decorator

У меня есть такое же исключение, потому что я пытался обернуть несколько функций этими двумя декораторами:

@app.route("/path1")
@exception_handler
def func1():
    pass

@app.route("/path2")
@exception_handler
def func2():
    pass

В частности, это вызвано попыткой зарегистрировать несколько функций с помощью обертки имени:

def exception_handler(func):
  def wrapper(*args, **kwargs):
    try:
        return func(*args, **kwargs)
    except Exception as e:
        error_code = getattr(e, "code", 500)
        logger.exception("Service exception: %s", e)
        r = dict_to_json({"message": e.message, "matches": e.message, "error_code": error_code})
        return Response(r, status=error_code, mimetype='application/json')
  return wrapper

Изменение имени функции, которая была решена для меня (wrapper.func_name = func.func_name):

def exception_handler(func):
  def wrapper(*args, **kwargs):
    try:
        return func(*args, **kwargs)
    except Exception as e:
        error_code = getattr(e, "code", 500)
        logger.exception("Service exception: %s", e)
        r = dict_to_json({"message": e.message, "matches": e.message, "error_code": error_code})
        return Response(r, status=error_code, mimetype='application/json')
  # Renaming the function name:
  wrapper.func_name = func.func_name
  return wrapper

Затем было выполнено декорирование более чем одной конечной точки.

0
задан adyoi 17 January 2019 в 06:23
поделиться

2 ответа

Разделить на позицию нулевой длины, которая следует за последовательностью букв.

Код: Демонстрация

$string = 'ABC00001';
$output = preg_split('~[A-Z]+\K~', $string);
var_export($output);

В \K написано, что нужно забыть предыдущие сопоставленные символы.

0
ответ дан mickmackusa 17 January 2019 в 06:23
поделиться

Вы можете использовать preg_split с флагами PREG_SPLIT_DELIM_CAPTURE и PREG_SPLIT_NO_EMPTY, чтобы делать то, что вы хотите:

$string = 'ABC00001';
$output = preg_split('/([A-Z]+)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
print_r($output);

Вывод:

Array ( [0] => ABC [1] => 00001 )
[119 ] Демонстрация на 3v4l.org

0
ответ дан Nick 17 January 2019 в 06:23
поделиться
Другие вопросы по тегам:

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