簡體   English   中英

String.contains的java正則表達式

[英]java regular expression for String.contains

我正在尋找如何創建一個正則表達式,它與String類中的“ contains”方法100%等效。 基本上,我有幾千個我正在搜索的短語,而且根據我的理解,出於性能原因,編譯正則表達式一次並使用它多次,比調用“mystring.contains(testString)”更好。在具有相同testString值的不同“ mystring”值上再次進行說明。

編輯:擴展我的問題...我將有成千上萬個“ testString”值,並且我不想將這些值轉換為正則表達式機制可以理解的格式。 我只希望能夠直接傳遞用戶輸入的短語,並查看是否在碰巧包含“ mystring”的任何值中找到它。 “testString”不會改變它的值,但會有成千上萬的這就是為什么我想創建匹配器對象並一遍又一遍地重復使用它(顯然我的正則表達式技能不符合要求)

編譯模式時可以使用LITERAL標志告訴引擎你正在使用文字字符串,例如:

 Pattern p = Pattern.compile(yourString, Pattern.LITERAL);

但是你真的確定這樣做然后重用結果比String#contains更快嗎? 足以讓復雜性值得嗎?

好吧,您可以使用Pattern.quote為每個輸入字符串獲取一個“正則表達式”。 您的任何條款是否包含換行符? 如果是這樣,那至少可以使生活變得有點棘手,盡管遠非不可能。

無論如何,您基本上只需將引用的術語合並為:

Pattern pattern = Pattern.compile("quoted1|quoted2|quoted3|...");

您可能希望使用Guava的Joiner輕松地將引用的字符串連接在一起,盡管顯然手動操作並不是非常困難。

但是,我會嘗試這種方法,然后測試它實際上是否比僅調用contains更為有效。 你有沒有一個基准測試表明contains太慢了?

暫無
暫無

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

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