Regex จับคู่ทุกอย่างหลังเครื่องหมายคำถาม?


125

ฉันมีฟีดใน Yahoo Pipes และต้องการจับคู่ทุกอย่างหลังเครื่องหมายคำถาม

จนถึงตอนนี้ฉันได้หาวิธีจับคู่เครื่องหมายคำถามโดยใช้ ..

\?

ตอนนี้เพื่อให้ตรงกับทุกสิ่งที่อยู่หลัง / ตามเครื่องหมายคำถาม


2
\?.*ตรงกับทุกอย่าง (รวมทั้งสตริงที่ว่างเปล่า) ?หลังจากที่
khachik

คุณใช้ภาษาโปรแกรมอะไร
Mark Byers

1
สำหรับผู้ที่ใช้ Java คือ"\\?"
CodyBugstein

คำตอบ:


251
\?(.*)

คุณต้องการเนื้อหาของกลุ่มการจับภาพแรก


15
@ ทำเครื่องหมายว่านี่คือสิ่งที่คุณต้องการ (แม้ว่าคำถามนี้จะเก่า!) โปรดทำเครื่องหมายที่นี่เป็นคำตอบ
Pieter VDE

5
@Dreamonic อย่าคิดว่ามันจะเกิดขึ้น :(
Starkers

4
@Starkers คุณถูกต้อง มันจะไม่เกิดขึ้น มาร์คไม่ได้มาตั้งแต่Feb 5 '11 at 10:41นั้น ยังดีที่จะชี้ให้เห็นการเปลี่ยนแปลงทุกอย่างที่เราได้รับ อาจจะมีคนเรียนรู้จาก Dreamonic ชี้ให้เห็นสิ่งนี้
DutGRIFF

1
คุณจะจับเนื้อหาหลังจากเครื่องหมายคำถามสุดท้ายได้อย่างไร ฉันต้องการ 'ยึด' หลังจากนั้น - ฉันไม่แน่ใจว่าสมอเป็นคำที่ถูกต้องหรือไม่
BKSpurgeon

2
@BKSpurgeon จับกลุ่มแรกใน ^. * \? ([^?] *) $ ควรใช้งานได้
58

61

ลองสิ่งนี้:

\?(.*)

วงเล็บคือกลุ่มการจับภาพที่คุณสามารถใช้เพื่อแยกส่วนของสตริงที่คุณสนใจได้

หากสตริงสามารถมีบรรทัดใหม่ได้คุณอาจต้องใช้ตัวแก้ไข "dot all" เพื่อให้จุดตรงกับอักขระของบรรทัดใหม่ คุณต้องทำหรือไม่และวิธีการทำขึ้นอยู่กับภาษาที่คุณใช้ ดูเหมือนว่าคุณลืมพูดถึงภาษาโปรแกรมที่คุณใช้ในคำถามของคุณ

อีกทางเลือกหนึ่งที่คุณสามารถใช้ได้หากภาษาของคุณรองรับการดูความกว้างคงที่เบื้องหลังการยืนยันคือ:

(?<=\?).*

โอ้ความกว้างคงที่? ฉันจะดูเบื้องหลังอะไรแบบนี้ได้ไหม หัวข้อ: รหัส, การเขียนโปรแกรม, การออกแบบดังนั้นฉันต้องการเลือกโคลอนและมองไปข้างหลังให้ไกลที่สุดเท่าที่ cpaital T ของหัวข้อและ fowards ไปยังจุดสิ้นสุดของบรรทัด? (ในกรณีนี้จุดสิ้นสุดของบรรทัดคือ "การออกแบบ"
มาระโก

@ มาร์ค: คุณใช้ภาษาอะไร?
Mark Byers

ฉันใช้ Yahoo Pipes ซึ่งยกเว้น regex ฉันได้รับคำตอบสำหรับคำถามนี้แล้วและตอนนี้กำลังมองหา regex ที่เลือก 6 ตัวอักษรหลังเครื่องหมายจุดคู่และส่งต่อ (ทั้งหมด) มากที่สุด ..
มาร์ค

@ มาร์ค: ฉันตรวจสอบรายการคำถามของคุณแล้ว แต่ไม่เห็นคำถามใหม่ของคุณ แน่ใจหรือว่าโพสต์แล้ว
Mark Byers

ฉันจะถามคำถามใหม่นี้อีกครั้งในอีกสักครู่ เดาว่าดีที่สุดที่จะแยกคำถามของฉันออกจากกันและควรถามทั้งสองอย่างพร้อมกัน ขอบคุณ
มาร์ค

36

ด้วยเทคนิคการมองโลกในแง่บวก :

(?<=\?).*

(เรากำลังค้นหาข้อความที่อยู่ข้างหน้าด้วยเครื่องหมายคำถามที่นี่)

Input: derpderp?mystring blahbeh
Output: mystring blahbeh

ตัวอย่าง

โดยทั่วไป?<=คือโครงสร้างกลุ่มที่ต้องใช้เครื่องหมายคำถามที่ใช้ Escape ก่อนจึงจะจับคู่ได้

พวกเขาทำงานได้ดีจริง ๆ แต่การใช้งานทั้งหมดไม่สนับสนุนพวกเขา


13
\?(.*)$

หากคุณต้องการจับคู่อักขระทั้งหมดหลัง "?" คุณสามารถใช้กลุ่มเพื่อจับคู่อักขระใดก็ได้และคุณควรใช้เครื่องหมาย "$" เพื่อระบุจุดสิ้นสุดของบรรทัด


1
ในการใช้นิพจน์ทั่วไป.โดยค่าเริ่มต้นจะไม่ตรงกับอักขระบรรทัดใหม่ ด้วยเหตุนี้แม้ว่าจะไม่มีอักขระสิ้นสุดของบรรทัดในนิพจน์ แต่ก็จะจับคู่กับจุดสิ้นสุดของบรรทัด
Mark Byers

2

ตรวจสอบไซต์นี้: http://rubular.com/โดยทั่วไปไซต์จะอนุญาตให้คุณป้อนข้อความตัวอย่าง (สิ่งที่คุณต้องการหาในไซต์ของคุณ) จากนั้นเมื่อคุณสร้างนิพจน์ทั่วไปจะเน้นสิ่งที่ถูกจับคู่ ตามเวลาจริง


ขอบคุณสำหรับสิ่งนั้นคุณรู้วิธีจับคู่ลำไส้ใหญ่หรือไม่? และจำนวนหนึ่งของอักขระก่อนโคลอน?
มาร์ค

/([a-zA-Z]{4}):/จะจับคู่Test: Welcomeและคว้าTest
Austin Lin

0

str.replace(/^.+?\"|^.|\".+/, '');

บางครั้งวิธีนี้ใช้ไม่ดีเมื่อคุณต้องการเลือกสิ่งอื่นที่จะลบระหว่าง "" และคุณไม่สามารถใช้มากกว่าสองครั้งในหนึ่งสตริง เพียงแค่เลือกสิ่งที่ไม่อยู่ระหว่าง "" และแทนที่ด้วยอะไรเลย

แม้ว่าฉันจะสับสนเล็กน้อย แต่ก็พยายามอธิบายไม่ดี ^.+?(ไม่ได้อะไรเพิ่ม) จนถึงครั้งแรก"แล้ว|หรือ / หยุด (ยังคงค้นคว้าสิ่งที่มันหมายถึงจริงๆ) จน / ที่^.ได้เลือกอะไรจนกระทั่งก่อนที่ 2 "โดยใช้ ( |หยุด / ที่) และเลือกทั้งหมดที่ตามมาด้วย +.


โปรดพิจารณาเพิ่มคำอธิบายรหัสของคุณเพื่อให้เราทราบว่ามันทำอะไรและทำไม
Pika the Wizard of the Whales
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.