استبدال قيمة الخاصية باستخدام التعابير المنطقية

StackOverflow https://stackoverflow.com/questions/1003713

  •  05-07-2019
  •  | 
  •  

سؤال

ولدي ملف config.properties تحتوي على خصائص في تنسيق خصائص جافا. أنا بحاجة إلى استبدال قيمة الممتلكات مع اسم معروف مع قيمة جديدة. ينبغي الحفاظ على تعليقات وتنسيق الملف.

ونهج بلدي الحالي هو استخدام التعابير المنطقية لتتناسب مع اسم الخاصية ثم قم باستبدال قيمتها. ومع ذلك، خصائص جافا تدعم القيم متعدد الخطوط، والتي لدي مطابقة قتا عصيبا.

وهنا مثال على ذلك. config.properties نفترض يحتوي على النص التالي:

# A property
A = 1\
     2

# B property
B = 2

وأود أن استبدال قيمة الممتلكات ومع "3". وينبغي أن تكون النتيجة النهائية:

# A property
A = 3

# B property
B = 2

ولا تعمل بلدي (?s)(A[\\s]*=[\\s]*)(.*) باستخدام التعابير المنطقية الحالية بشكل صحيح.

يرجى اقتراح باستخدام التعابير المنطقية أو طريقة مختلفة للقيام بذلك.

وشكرا!

هل كانت مفيدة؟

المحلول

وجرب هذا:

String regex = "(?m)^(A\\s*+=\\s*+)"
    + "(?:[^\r\n\\\\]++|\\\\(?:\r?\n|\r|.))*+$";

وتركت الجزء الأول كما كنت كتبت ذلك حتى أتمكن من التركيز على مطابقة القيمة؛ القواعد التي تحكم مفتاح وفاصل هي في الواقع أكثر تعقيدا من ذلك.

وقيمة تتكون من صفر أو أكثر من أي حرف باستثناء إرجاع، تغذية أو مائل أو مائل تليها فاصل سطر أو أي حرف غير خط فاصل واحد. فاصل خط يمكن أن يكون أي من الأشكال الثلاثة الأكثر شيوعا: DOS / ويندوز (\r\n)، ويونيكس / لينكس / OSX (\n) أو ما قبل OSX ماك (\r)

لاحظ أن التعبير المعتاد في وضع متعدد الأسطر حتى المراسي خط ستعمل، ولكن الوضع <م> لا singleline (DOTALL). أود أيضا أن تستخدم محددو الكمية غيور في جميع أنحاء لأنني أعرف التراجع لن يكون مفيدا.

نصائح أخرى

لديك الأدوات في جافا لتحميل وقراءة وتعديل وحفظ خصائص الملفات.

وشخصيا أحب جاكرتا العموم تكوين .

وأنا أتفق مع streetpc على استخدام جاكرتا تكوين العموم.

ولكن التركيز على التعابير المنطقية الخاصة بك، والمشكلة هي أن معظم محركات التعبير العادي يعمل على خط لكل القسط افتراضيا.

وعلى سبيل المثال في (قديمة جدا) فئة Perl5Util (انظر <لأ href = "http://jakarta.apache.org/oro/api/org/apache/oro/text/perl/Perl5Util.html" يختلط = "noreferrer نوفولو"> http://jakarta.apache.org/oro/api/org/apache/oro/text/perl/Perl5Util.html ) يمكنك أن تقرأ أن أنماط يكون بناء الجملة التالي:

[m]/pattern/[i][m][s][x]

البادئة م اختيارية ومعنى الخيارات زائدة اختياري هم:

i    case insensitive match 
m    treat the input as consisting of multiple lines 
s    treat the input as consisting of a single line 
x    enable extended expression syntax incorporating whitespace and comments
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top