Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tutorial lanjutan tentang ungkapan biasa dalam bahasa Go: Cara menggunakan syarat pra-carian

Tutorial lanjutan tentang ungkapan biasa dalam bahasa Go: Cara menggunakan syarat pra-carian

PHPz
PHPzasal
2023-07-12 19:37:411300semak imbas

Tutorial lanjutan ungkapan biasa bahasa Go: Cara menggunakan syarat pra-carian

Ungkapan biasa ialah alat pemadanan teks yang berkuasa Dalam bahasa Go, ungkapan biasa boleh digunakan untuk pemadanan corak, penggantian dan pengekstrakan rentetan, dsb. Dalam tutorial sebelumnya, kami telah mempelajari beberapa sintaks ungkapan biasa asas dan kaedah aplikasi. Artikel ini akan terus meneroka teknik lanjutan ungkapan biasa dalam bahasa Go, memfokuskan pada cara menggunakan syarat pra-carian.

Syarat pra-carian merujuk kepada meningkatkan kecekapan pemadanan dengan pra-hukum sama ada syarat tertentu dipenuhi semasa proses pemadanan. Dalam aplikasi praktikal, banyak corak ungkapan biasa akan mengandungi beberapa syarat yang kompleks Menggunakan keadaan pra-carian boleh mengelakkan operasi padanan yang tidak perlu, dengan itu meningkatkan prestasi.

Di bawah kami menggunakan beberapa contoh untuk menunjukkan cara menggunakan syarat pra-carian.

  1. Padanan ramalan ke hadapan

Padanan ramalan ke hadapan menggunakan sintaks (?=corak), yang bermaksud aksara padanan yang memenuhi syarat corak, tetapi tidak menggunakan hasil padanan. Sebagai contoh, jika kita ingin memadankan semua perkataan bermula dengan nombor dalam rentetan, kita boleh menggunakan padanan ramalan ke hadapan untuk mencapai ini. (?=pattern),表示匹配满足pattern条件的字符,但不消耗匹配结果。例如,我们要匹配一个字符串中的所有以数字开头的单词,可以使用正向预测匹配来实现。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "123abc 456def 789ghi"
    pattern := `w+(?=d)`

    re := regexp.MustCompile(pattern)
    res := re.FindAllString(str, -1)

    fmt.Println(res)
}

运行结果为[123abc],即匹配到以数字开头的单词123abc

  1. 反向预测匹配

反向预测匹配使用语法(?!pattern),表示匹配不满足pattern条件的字符,但不消耗匹配结果。例如,我们要匹配一个字符串中的所有不以数字开头的单词,可以使用反向预测匹配来实现。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "123abc 456def 789ghi"
    pattern := `w+(?!d)`

    re := regexp.MustCompile(pattern)
    res := re.FindAllString(str, -1)

    fmt.Println(res)
}

运行结果为[abc def ghi],即匹配到不以数字开头的单词abcdefghi

  1. 正向否定预测匹配

正向否定预测匹配使用语法(?<!pattern),表示匹配不满足pattern条件的前面字符。例如,我们要匹配一个字符串中的所有不在括号内的数字,可以使用正向否定预测匹配来实现。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "(123)abc(456)def(789)ghi"
    pattern := `(?<!()(d+)(?!))`

    re := regexp.MustCompile(pattern)
    res := re.FindAllString(str, -1)

    fmt.Println(res)
}

运行结果为[123 789],即匹配到不在括号内的数字123789rrreee

Hasil larian ialah [123abc], iaitu perkataan yang bermula dengan nombor 123abc dipadankan.

    Padanan ramalan songsang

    🎜Padanan ramalan songsang menggunakan sintaks (?!corak), yang bermaksud aksara sepadan yang tidak memenuhi syarat corak, tetapi tidak mengambil keputusan yang sepadan. Sebagai contoh, jika kita ingin memadankan semua perkataan dalam rentetan yang tidak bermula dengan nombor, kita boleh menggunakan padanan ramalan terbalik untuk mencapai ini. 🎜rrreee🎜Hasil larian ialah [abc def ghi], iaitu perkataan yang tidak bermula dengan nombor dipadankan: abc, def, dan ghi . 🎜
      🎜Padanan ramalan negatif ke hadapan🎜🎜🎜Padanan ramalan negatif ke hadapan menggunakan sintaks (?<!pattern), yang bermaksud memadankan aksara sebelumnya yang tidak memenuhi keadaan corak. Contohnya, jika kita ingin memadankan semua nombor dalam rentetan yang tidak berada dalam kurungan, kita boleh menggunakan padanan ramalan negatif hadapan untuk mencapai ini. 🎜rrreee🎜Hasil larian ialah [123 789], yang sepadan dengan nombor 123 dan 789 yang tiada dalam kurungan. 🎜🎜Dengan contoh di atas, kami belajar cara menggunakan syarat pra-carian untuk padanan yang lebih tepat. Dalam aplikasi praktikal, memilih keadaan pra-carian yang sesuai seperti yang diperlukan boleh meningkatkan kecekapan pemadanan ungkapan biasa. Apabila menulis ungkapan biasa yang kompleks, kami boleh menggunakan beberapa alat ujian ungkapan biasa dalam talian untuk penyahpepijatan bagi memastikan ketepatan hasil yang sepadan. 🎜🎜Saya berharap melalui pengenalan artikel ini, anda akan mempunyai pemahaman yang lebih baik tentang aplikasi lanjutan ungkapan biasa dalam bahasa Go dan dapat menggunakan keadaan pra-carian secara fleksibel untuk meningkatkan kecekapan pemadanan. Dalam pembangunan sebenar, jika anda menghadapi keperluan pemprosesan rentetan yang kompleks, anda juga boleh cuba menggunakan ungkapan biasa, yang akan memberikan anda sokongan fungsi yang berkuasa. 🎜

Atas ialah kandungan terperinci Tutorial lanjutan tentang ungkapan biasa dalam bahasa Go: Cara menggunakan syarat pra-carian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn