簡體   English   中英

Java Regex:找到匹配begin和end的單詞

[英]Java Regex: find word that matches begin and end

我是正常表達的新手,我開始閱讀更多關於它們的內容,所以要溫柔:-)

我想找到所有以my("開頭的單詞my("my(' 。單詞本身可以包含下划線,字符,數字,基本上任何字符。但它應以")')結束。

所以我嘗試了以下方法:

Pattern.compile("_(\"(.*)\")"); // for underscores first, instead of my

Pattern.compile("(my)(\"(.*)\")");

但這也給了我其他的東西,我也看不出為什么以及在哪里我犯了錯誤......

謝謝

如果你想匹配my("xxx")my('xxx')而不是my("xxx')那么嘗試以下表達式:

my\((?:"[^"]*"|'[^']*')\)

這是表達式的簡短細分:

  • my\\(...\\)表示匹配應該從my(開始my(並以...結尾)
  • (?:"[^"]*"|'[^']*')表示由雙引號或單引號括起來的字符序列(因此字符類表示”任何不是雙引號的字符“或”任何字符“字符不是單引號“)

編輯:

表達式(my)("(.*)")是,它是貪婪的,匹配將從my("但最后一個結束")因為.*匹配任何東西。 因此它會匹配my("xxx") your("yyy")因為.*匹配xxx") your("yyy

有關正則表達式的更多信息,請訪問http://www.regular-expressions.info

在正則表達式中,括號( () )實際上是保留字符,因此您需要轉義它們。 所以這個正則表達式應該可以解決這個問題: _\\\\(\\"(.*)\\"\\\\) 但是,你還說你想要找到必須my( 開頭的單詞my(並且必須") 結尾 ") 。所以你需要添加這樣的錨: ^my\\\\([\\"'](.*)[\\"']\\\\)$ 。這應該匹配任何以my("開頭的字符串my("my("'和以...結尾")')

^$是錨點。 ^將指示正則表達式引擎從字符串的開頭開始匹配, $將指示正則表達式引擎在字符串的末尾停止匹配。 如果刪除這些錨點,則以下內容將被視為匹配: foo my('...') barmy("...") bar等。

然而,這將沒有區別,並將匹配像my("...')my('...")類的字符串。

使用單詞邊界選項,

\bmy\((["']).*?\1\)(?:\b|$)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM