รูปแบบ regex ของฉันดูเหมือนอะไร
<xxxx location="file path/level1/level2" xxxx some="xxx">
ฉันสนใจเฉพาะในส่วนของเครื่องหมายคำพูดที่กำหนดให้กับสถานที่ มันไม่ง่ายอย่างนั้นถ้าไม่มีสวิตช์โลภ?
/.*location="(.*)".*/
ดูเหมือนจะไม่ทำงาน
รูปแบบ regex ของฉันดูเหมือนอะไร
<xxxx location="file path/level1/level2" xxxx some="xxx">
ฉันสนใจเฉพาะในส่วนของเครื่องหมายคำพูดที่กำหนดให้กับสถานที่ มันไม่ง่ายอย่างนั้นถ้าไม่มีสวิตช์โลภ?
/.*location="(.*)".*/
ดูเหมือนจะไม่ทำงาน
คำตอบ:
คุณต้องทำให้การแสดงออกปกติของคุณไม่โลภเพราะโดยปกติจะตรงกับทุก"(.*)"
"file path/level1/level2" xxx some="xxx"
แต่คุณสามารถทำให้จุดดาวไม่ใช่ความโลภซึ่งจะทำให้ตรงกับตัวละครน้อยที่สุด:
/location="(.*?)"/
เพิ่ม?
ในปริมาณ A ( ?
, *
หรือ+
) ทำให้มันไม่โลภ
.*?
เป็นการ.\{-}
จับคู่ที่ไม่โลภ
location="(.*)"
จะจับคู่จาก "หลังจากlocation=
จนถึง" หลังsome="xxx
เว้นแต่คุณจะไม่โลภ ดังนั้นคุณอาจจำเป็นต้อง.*?
(เช่นทำให้มันไม่โลภ) หรือดีกว่าแทนที่ด้วย.*
[^"]*
.*?
สัญกรณ์ทั่วไปมากกว่า[^"]*
เกี่ยวกับ
.*location="([^"]*)".*
วิธีนี้จะหลีกเลี่ยงการค้นหาที่ไม่ จำกัด ด้วย. * และจะจับคู่กับเครื่องหมายคำพูดแรก
ใช้การจับคู่ที่ไม่โลภถ้าเครื่องยนต์ของคุณรองรับ เพิ่มหรือไม่ ภายในการจับภาพ
/location="(.*?)"/
เพราะคุณกำลังใช้subpattern เชิงปริมาณและ descried ในPerl Doc ,
โดยค่าเริ่มต้นรูปแบบย่อยที่ถูกจัดอันดับคือ " โลภ " นั่นคือมันจะจับคู่หลาย ๆ ครั้งให้มากที่สุดเท่าที่จะเป็นไปได้ หากคุณต้องการ ให้ตรงกับจำนวนครั้งต่ำสุดที่เป็นไปได้ให้ปฏิบัติตามตัวบ่งชี้ ด้วย "?" . โปรดทราบว่าความหมายไม่เปลี่ยนแปลงเพียงแค่ "ความโลภ":
*? //Match 0 or more times, not greedily (minimum matches)
+? //Match 1 or more times, not greedily
ดังนั้นในการอนุญาตให้รูปแบบเชิงปริมาณของคุณทำการจับคู่ขั้นต่ำให้ทำตามโดย?
:
/location="(.*?)"/
นี่คือวิธีอื่น
นี่คือสิ่งที่คุณต้องการ นี่มันขี้เกียจ[\s\S]*?
รายการแรก:
[\s\S]*?(?:location="[^"]*")[\s\S]*
แทนที่ด้วย:$1
คำอธิบาย : https://regex101.com/r/ZcqcUm/2
เพื่อความสมบูรณ์นี่จะเป็นอันสุดท้าย นี่เป็นโลภ[\s\S]*
รายการสุดท้าย:[\s\S]*(?:location="([^"]*)")[\s\S]*
แทนที่ด้วย:$1
คำอธิบาย : https://regex101.com/r/LXSPDp/3
มีความแตกต่างเพียง 1 ข้อระหว่างนิพจน์ทั่วไปสองรายการนี้และนั่นคือ ?