Không có câu hỏi nào về SO giải quyết vấn đề cụ thể của tôi. Tôi biết rất ít về biểu hiện chính quy. Tôi đang xây dựng một trình phân tích biểu thức trong Java bằng cách sử dụng Regex Class cho mục đích đó. Tôi muốn trích xuất Operands, Arguments, Operators, Symbols và Function Names từ biểu thức và sau đó lưu vào ArrayList. Hiện nay tôi đang sử dụng logic nàyCụm từ thông dụng để trích xuất toán tử từ biểu thức toán học
String string = "2!+atan2(3+9,2+3)-2*PI+3/3-9-12%3*sin(9-9)+(2+6/2)" //This is just for testing purpose later on it will be provided by user
List<String> res = new ArrayList<>();
Pattern pattern = Pattern.compile((\\Q^\\E|\\Q/\\E|\\Q-\\E|\\Q-\\E|\\Q+\\E|\\Q*\\E|\\Q)\\E|\\Q)\\E|\\Q(\\E|\\Q(\\E|\\Q%\\E|\\Q!\\E)) //This string was build in a function where operator names were provided. Its mean that user can add custom operators and custom functions
Matcher m = pattern.matcher(string);
int pos = 0;
while (m.find())
{
if (pos != m.start())
{
res.add(string.substring(pos, m.start()))
}
res.add(m.group())
pos = m.end();
}
if (pos != string.length())
{
addToTokens(res, string.substring(pos));
}
for(String s : res)
{
System.out.println(s);
}
Output:
2
!
+
atan2
(
3
+
9
,
2
+
3
)
-
2
*
PI
+
3
/
3
-
9
-
12
%
3
*
sin
(
9
-
9
)
+
(
2
+
6
/
2
)
Vấn đề là bây giờ biểu có thể chứa Matrix với định dạng người dùng xác định. Tôi muốn xem mọi Ma trận là Toán tử hoặc Đối số trong trường hợp chức năng.
Input 1:
String input_1 = "2+3-9*[{2+3,2,6},{7,2+3,2+3i}]+9*6"
Output nên là:
2
+
3
-
9
*
[{2+3,2,6},{7,2+3,2+3i}]
+
9
*
6
Input 2:
String input_2 = "{[2,5][9/8,func(2+3)]}+9*8/5"
Output nên là:
{[2,5][9/8,func(2+3)]}
+
9
*
8
/
5
Input 3:
String input_3 = "<[2,9,2.36][2,3,2!]>*<[2,3,9][23+9*8/8,2,3]>"
Output nên là:
<[2,9,2.36][2,3,2!]>
*
<[2,3,9][23+9*8/8,2,3]>
Tôi muốn mà bây giờ ArrayList nên chứa tất cả các toán hạng, khai thác, luận cứ, chức năng và biểu tượng ở mỗi chỉ số. Làm thế nào tôi có thể đạt được sản lượng mong muốn của tôi bằng cách sử dụng biểu thức chính quy. Xác nhận biểu thức là không bắt buộc.
@trashgod tôi nghĩ rằng liên kết bạn cung cấp không liên quan đến vấn đề của tôi –