Формат времени SCORM 2004 года - регулярное выражение?

http://jeremy.zawodny.com/blog/archives/010717.html :

#!/bin/bash

FAIL=0

echo "starting"

./sleeper 2 0 &
./sleeper 2 1 &
./sleeper 3 0 &
./sleeper 2 0 &

for job in `jobs -p`
do
echo $job
    wait $job || let "FAIL+=1"
done

echo $FAIL

if [ "$FAIL" == "0" ];
then
echo "YAY!"
else
echo "FAIL! ($FAIL)"
fi

6
задан Dan Appleyard 20 August 2009 в 17:12
поделиться

3 ответа

Используйте [0-9] для сопоставления любой цифры. + для соответствия 1 или более повторений. ? для соответствия 0 или 1 повторению. () для группировки и извлечения вывода.

P (([0-9] + Y)? ([0-9] + M)? ([0-9] + D)? ) (Т ([0-9] + H)? ([0-9] + M)? ([0-9. ] + S)?)?

import re

>>> p = re.compile('P(([0-9]+Y)?([0-9]+M)?([0-9]+D)?)(T([0-9]+H)?([0-9]+M)?([0-9.]+S)?)?')

>>> p.match('P1Y3M2DT3H').groups()
('1Y3M2D', '1Y', '3M', '2D', 'T3H', '3H', None, None)

>>> p.match('P3M2DT3H').groups()
('3M2D', None, '3M', '2D', 'T3H', '3H', None, None)

>>> p.match('PT3H5M').groups()
('', None, None, None, 'T3H5M', '3H', '5M', None)

>>> p.match('P1Y3M4D').groups()
('1Y3M4D', '1Y', '3M', '4D', None, None, None, None)
1
ответ дан 10 December 2019 в 02:51
поделиться

JavaScript не поддерживает / x (режим свободного пробела или комментариев), поэтому удалите пробелы из этого регулярного выражения перед его использованием.

/^P(?=.)
 (?:\d+Y)?
 (?:\d+M)?
 (?:\d+D)?
 (?:T(?=.)
    (?:\d+H)?
    (?:\d+M)?
    (?:\d+
       (?:\.\d{1,2})?
    )?
 )?$/i

Каждый (? =.) Lookahead утверждает, что в этой точке совпадения остался хотя бы один символ. Это означает, что по крайней мере одна из следующих групп (т.е. группа Y, M, D или T после P и группа H, M или S после T) должна соответствовать, даже если все они являются необязательными. Это удовлетворяет второму из добавленных требований в обновленной спецификации.

1
ответ дан 10 December 2019 в 02:51
поделиться

Наша реализация SCORM Engine использует комбинацию регулярного выражения, аналогичного приведенным выше, и некоторую базовую логику JavaScript, которая выполняет дополнительную проверку.

0
ответ дан 10 December 2019 в 02:51
поделиться
Другие вопросы по тегам:

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