Я плохо разбираюсь в регулярных выражениях, но у меня есть следующее, но я предполагаю, что часть следующих средств ищет 13-16 цифр, а затем возвращает успех, если после этого находит 3-4 цифры. Проблема состоит в том, что 3-4 цифры не обязательны, и они также могут быть перед цифрами 13-16, поэтому я думаю, что я хочу объединить положительный взгляд вперед / взгляд назад, отрицательный взгляд вперед / взгляд назад. Это звучит сложно, есть более простой способ?
(\d{13,16})[<"'].*?(?=[>"']\d{3,4}[<"'])[>"'](\d{3,4})[<"']
, который будет соответствовать ccnum и серии в следующем фрагменте:
<CreditCard>
name="John Doe""
ccnum=""1111123412341231""
series="339"
exp="03/13">
</CreditCard>
Однако, если я удалю ccnum или серию, она не будет ничего соответствовать, и серия может быть необязательной. Также ряды могут появляться до или после ccnum, поэтому, если я добавлю атрибут series перед атрибутом ccnum, он тоже ничего не будет соответствовать. Это также не соответствует, если у меня есть серия перед ccnum как отдельные элементы, такие как или если я игнорирую элемент серии:
<CreditCard>
<series>234</series>
<ccnum>1235583839293838</ccnum>
</CreditCard>
Мне нужно, чтобы регулярное выражение соответствовало следующим сценариям, но я не знаю точного названия элементов, в данном случае я просто назвал их ccnum и series.
Вот те, которые работают:
<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>
Прямо сейчас, чтобы заставить это работать, я использую 3 отдельных регулярных выражения:
1 соответствует номеру кредитной карты, который указан перед кодом безопасности.
1 соответствует коду безопасности, который указан перед номером кредитной карты.
1, чтобы соответствовать только номеру кредитной карты.
Я попытался объединить выражения в or или, но в итоге получилось 5 групп (2 из первых 2 выражений и 1 из последнего)