Regex cocok dengan semuanya setelah tanda tanya?


125

Saya memiliki umpan di Yahoo Pipes dan ingin mencocokkan semuanya setelah tanda tanya.

Sejauh ini saya telah menemukan cara mencocokkan tanda tanya menggunakan ..

\?

Sekarang hanya untuk mencocokkan semua yang ada setelah / mengikuti tanda tanya.


2
\?.*cocok dengan semuanya (termasuk string kosong) setelahnya ?.
khachik

Bahasa pemrograman apa yang kamu gunakan?
Mark Byers

1
Bagi mereka yang menggunakan Java, ini"\\?"
CodyBugstein

Jawaban:


251
\?(.*)

Anda menginginkan konten dari grup tangkapan pertama.


15
@Tandai jika ini yang Anda butuhkan (meskipun pertanyaan ini sudah lama!), Tandai ini sebagai jawaban.
Pieter VDE

5
@Dreamonic Jangan berpikir itu terjadi :(
Starkers

4
@Starkers Anda benar. Itu tidak akan terjadi. Mark tidak ada sejak itu Feb 5 '11 at 10:41. Masih bagus untuk menunjukkan setiap perubahan yang kita dapatkan. Mungkin seseorang akan belajar dari Dreamonic yang menunjukkan hal ini.
DutGRIFF

1
bagaimana Anda menangkap konten setelah tanda tanya terakhir? Saya ingin 'berlabuh' setelah itu - saya tidak yakin apakah kata yang tepat adalah kata yang tepat.
BKSpurgeon

2
@BKSpurgeon grup penangkap pertama di ^. * \? ([^?] *) $ Harus berfungsi
thejh

61

Coba ini:

\?(.*)

Tanda kurung adalah grup penangkap yang dapat Anda gunakan untuk mengekstrak bagian dari string yang Anda minati.

Jika string dapat berisi baris baru, Anda mungkin harus menggunakan pengubah "titik semua" agar titik cocok dengan karakter baris baru. Apakah Anda harus melakukan ini atau tidak, dan bagaimana melakukannya, tergantung pada bahasa yang Anda gunakan. Tampaknya Anda lupa menyebutkan bahasa pemrograman yang Anda gunakan dalam pertanyaan Anda.

Alternatif lain yang dapat Anda gunakan jika bahasa Anda mendukung pernyataan lookbehind dengan lebar tetap adalah:

(?<=\?).*

Oh lebar yang tetap? Bisakah saya melihat ke belakang untuk sesuatu seperti ini? Topik: kode, pemrograman, desain Jadi saya ingin memilih titik dua dan melihat ke belakang sejauh cpaital T topik dan fowards sampai akhir di telepon? (dalam hal ini akhir baris adalah "desain".
Markus

@ Mark: Bahasa apa yang Anda gunakan?
Mark Byers

Saya menggunakan Yahoo Pipes yang tidak termasuk regex. Saya mendapatkan pertanyaan ini terjawab dan sekarang mencari regex yang memilih 6 karakter di belakang titik dua dan sebanyak (semua) ke depan ..
Tandai

@ Mark: Saya telah memeriksa daftar pertanyaan Anda, tetapi saya tidak melihat yang baru. Apakah Anda yakin telah mempostingnya?
Mark Byers

Saya akan menanyakan pertanyaan baru ini lagi dalam beberapa saat. Kurasa yang terbaik adalah memisahkan pertanyaan saya dan seharusnya menanyakan keduanya pada waktu yang sama. Terima kasih
Markus

36

Dengan teknik lookbehind positif :

(?<=\?).*

(Kami sedang mencari teks yang diawali dengan tanda tanya di sini)

Input: derpderp?mystring blahbeh
Output: mystring blahbeh

Contoh

Pada dasarnya ?<=is adalah konstruksi grup, yang memerlukan tanda tanya yang lolos, sebelum kecocokan dapat dibuat.

Mereka berkinerja sangat baik, tetapi tidak semua implementasi mendukungnya.


13
\?(.*)$

Jika Anda ingin mencocokkan semua karakter setelah "?" Anda dapat menggunakan grup untuk mencocokkan karakter apa pun, dan Anda sebaiknya menggunakan tanda "$" untuk menunjukkan akhir baris.


1
Di sebagian besar penerapan ekspresi reguler, .secara default tidak cocok dengan karakter baris baru. Akibatnya, bahkan tanpa akhir dari karakter baris dalam ekspresi itu akan cocok dengan akhir baris.
Mark Byers

2

Lihat situs ini: http://rubular.com/ Pada dasarnya situs ini memungkinkan Anda memasukkan beberapa teks contoh (apa yang Anda cari di situs Anda) dan kemudian saat Anda membuat ekspresi reguler, itu akan menyoroti apa yang dicocokkan waktu sebenarnya.


Terima kasih untuk itu, apakah Anda tahu cara mencocokkan titik dua? Dan sejumlah karakter tertentu sebelum titik dua?
Tandai

/([a-zA-Z]{4}):/akan mencocokkan Test: Welcomedan merebutTest
Austin Lin

0

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

Terkadang ini buruk untuk digunakan saat Anda ingin memilih apa lagi yang ingin dihapus di antara "" dan Anda tidak dapat menggunakannya lebih dari dua kali dalam satu string. Yang dilakukannya hanyalah memilih apa saja yang tidak ada di antara "" dan menggantinya dengan tidak ada.

Bahkan bagi saya ini agak membingungkan, tetapi saya tidak akan mencoba menjelaskannya. ^.+?(bukan apa-apa OPSIONAL) sampai pertama "kemudian |Or / stop (masih meneliti apa artinya sebenarnya) sampai / pada ^.tidak memilih apa pun sampai sebelum penggunaan ke-2 "( |berhenti / di). Dan pilih semua yang muncul setelah. +.


Harap pertimbangkan untuk menambahkan deskripsi kode Anda sehingga kami tahu apa fungsinya dan mengapa.
Pika the Wizard of the Whales
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.