3 回答

TA貢獻1799條經驗 獲得超8個贊
您可以使用
final String text = "This is param-start ?abcdef; param-end";
final String patternString = "(['\"]?)\\?.*?;\\1";
final Pattern pattern = Pattern.compile(patternString, Pattern.DOTALL);
final Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("Match found: " + matcher.group());
}
// => Match found: = ?abcdef;
備注:
while (matcher.find())
- 遍歷字符串中的所有潛在匹配matcher.group()
- 訪問匹配值。
正則表達式
(['"]?)
- 捕獲組 1:要么'
或"
\?
- 一個?
字符.*?
- 任何 0+ 字符,盡可能少(模式用 編譯Pattern.DOTALL
,因此它也將匹配換行符);
- 一個分號\1
- 與第 1 組中捕獲的值相同。

TA貢獻1853條經驗 獲得超18個贊
您的描述聲明“以 ? 開頭并以 ; 結尾”,但您的示例字符串不以分號結尾 - 它以雙引號結尾。
如果要允許字符串以單引號或雙引號開頭或結尾,則匹配應為: ^['"]?\?[^;]+;\['"]?$
添加回答
舉報