Я плохо разбираюсь в регулярном выражении, но у меня есть следующее, но я предполагаю, что часть следующих средств ищет 13-16 цифр, а затем возвращает успех, если после этого найдет 3 - 4 цифры. Проблема в том, что 3 - 4 цифры являются необязательными, и они также могут быть до 13 - 16 цифр, поэтому, я думаю, я хочу совместить положительный lookahead/lookbehind, отрицательный lookahead/lookbehind. Это звучит сложнее, есть ли более простой способ?Объединить положительный взгляд и негативный взгляд?
(\d{13,16})[<"'].*?(?=[>"']\d{3,4}[<"'])[>"'](\d{3,4})[<"']
, который будет соответствовать ccnum и серию в следующем фрагменте:
<CreditCard>
name="John Doe""
ccnum=""1111123412341231""
series="339"
exp="03/13">
</CreditCard>
Однако, если я удалить ccnum или серию, он ничего не соответствует, и серия может быть опционно , Также серия может появляться до или после ccnum, поэтому, если я поместил атрибут серии перед атрибутом ccnum, он тоже не соответствует. Это также не соответствует, если у меня есть ряд перед ccnum в виде отдельных элементов, таких, как, или если я не принимать во внимание ряд элементов:
<CreditCard>
<series>234</series>
<ccnum>1235583839293838</ccnum>
</CreditCard>
Мне нужно регулярное выражение соответствует следующие сценарии, но я не знаю, точное имя элементов, в этом случае я просто назвал их ccnum и рядами.
Вот те, которые работают:
<CreditCard>
<ccnum>1235583839293838</ccnum>
<series>123</series>
</CreditCard>
<CreditCard ccnum="1838383838383833">
<series>123</series>
</CreditCard>
<CreditCard ccnum="1838383838383833" series="139"
</CreditCard>
Он должен также соответствовать следующее, но не делает:
<CreditCard ccnum="1838383838383833"
</CreditCard>
<CreditCard series="139" ccnum="1838383838383833"
</CreditCard>
<CreditCard ccnum="1838383838383833"></CreditCard>
<CreditCard>
<series>123</series>
<ccnum>1235583839293838</ccnum>
</CreditCard>
<CreditCard>
<ccnum series="123">1235583839293838</ccnum>
</CreditCard>
Прямо сейчас, чтобы получить эту работу, я am usinng 3 отдельных регулярных выражения:
1 в соответствии с номером кредитной карты, который приходит до секунды код защиты.
1 в соответствии с кодом безопасности, который стоит перед номером кредитной карты.
1, чтобы соответствовать только номер кредитной карты.
Я попытался Комбинируя выражения в ОШ, но я в конечном итоге с 5 полных групп (2 из первых 2-х выражений и 1 из последнего)
Что не так с '\ d {13,16}'? – leppie
@leppie - Это просто соответствует ccnum, а не номер дополнительной серии – Xaisoft
. Тогда вы не должны использовать регулярное выражение для этого. Просто используйте синтаксический анализатор XML и проверьте значения с помощью регулярных выражений. Вы даже можете использовать XML-схему для проверки значений. – leppie