ไม่สามารถสร้าง regex สำหรับสตริง

Oct 13 2020

ฉันมีสตริงabc-[|123|243|]-xyz-[|432|567|]และต้องการสร้างนิพจน์ทั่วไปที่ตรงกับสตริงที่ระบุ

regex ควรได้รับการทดสอบกับตัวอย่างต่อไปนี้และด้วยผลลัพธ์ที่เฉพาะเจาะจง

ประสบการณ์ 1: abc-[|123|234|]-xyz-[|432|567|]( 123มีอยู่ใน[|123|243|])

ผลลัพธ์: ตรงกัน

ประสบการณ์ 2: xyz-[|123|243|]-abc-[|432|567|](ลำดับของabcและxyzแลกเปลี่ยน)

ผลลัพธ์: ไม่ตรงกัน

ประสบการณ์ 3: abc-[|243|563|]-xyz-[|432|567|]( 243และ432ปัจจุบัน)

ผลลัพธ์: ตรงกัน

ประสบการณ์ 4: xyz-[|143|434|]-abc-[|432|999|]( [|148|434|]ไม่ตรงกับตัวเลขใด ๆ ใน[|123|243|])

ผลลัพธ์: ไม่ตรงกัน

ฉันพยายามสร้าง regex แต่ใช้ได้เฉพาะในกรณีที่แน่นอนและไม่ทำงานในกรณีอื่น ๆ

abc-\[\|123\||243\|\]-xyz-\[\|432\||567\|\]

คำตอบ

1 WiktorStribiżew Oct 13 2020 at 10:05

คุณสามารถใช้ได้

^abc-\[\|(?:123|243)\|\d+\|\]-xyz-\[\|432\|\d+\|\]$

ดูการสาธิต regex

รายละเอียด

  • ^ - จุดเริ่มต้นของสตริง
  • abc-\[\| - abc-[|
  • (?:123|243)- อย่างใดอย่างหนึ่ง123หรือ243
  • \| - ก |
  • \d+ - 1+ หลัก
  • \|\]-xyz-\[\|432\|- |]-xyz-[|432|ข้อความ
  • \d+ - 1+ หลัก
  • \|\]- |]ข้อความ
  • $ - จุดสิ้นสุดของสตริง