[英]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('...') bar
, my("...") bar
等。
然而,這將沒有區別,並將匹配像my("...')
和my('...")
類的字符串。
使用單詞邊界選項,
\bmy\((["']).*?\1\)(?:\b|$)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.