java - কেন জাভা 9 থেকে জাভা 8 তে String.replaceAll() ভিন্নভাবে কাজ করে?



regex java-8 (1)

java-8 মধ্যে এই কোড আউটপুট 02 কিন্তু java-9 বা o2 ?

"o2".replaceAll("([oO])([^[0-9-]])", "0$2")

সম্ভবত JDK-6609854 এবং JDK-8189343 যা নেতিবাচক নেস্টেড অক্ষর শ্রেণীগুলির পরিচালনা করে (আপনার উদাহরণ [^[0-9-]] )। এই আচরণটি 9 এবং 10 এ স্থির করা হয়েছিল, তবে ফিক্স 8 -এ ব্যাকপোর্ট করা হয়নি। জাভা 8 এর জন্য বাগ হিসাবে ব্যাখ্যা করা হয়েছে:

জাভাতে, নেতিবাচক [brackets] প্রদর্শিত যেকোনো কিছুতে নেতিবাচক প্রয়োগ করা হয় না।

সুতরাং [^c] "সি" তে মেলে না, যেমনটি আপনি আশা করবেন।

[^[c]] "সি" মেলে না। আমি কি আশা করবে না।

[[^c]] "c" এর সাথে মেলে না

একই রেঞ্জ বা সম্পত্তি এক্সপ্রেশনগুলির জন্য সত্য থাকে - যদি তারা বন্ধনীগুলির ভিতরে থাকে, আউট লেভেলে একটি নেতিবাচক প্রভাব তাদের প্রভাবিত করে না।

[^az] [^[az]] থেকে বিপরীত





java-9