1

这是弹簧配置:

<bean id="wrapInMarginalMarkup" class="com.a.ChangeContentAction">
        <property name="regEx">
            <bean class="java.util.regex.Pattern" factory-method="compile">
                <constructor-arg value="(.*)(&lt;m&gt;)(.*)(&lt;xm&gt;)(.*)" />
            </bean>
        </property>
        <property name="replaceExpression" value="$1&lt;marginal\.markup&gt;$3&lt;/marginal\.markup&gt;$5" />
    </bean>

该类接受java中的参数,例如:

   private Pattern regEx;
    private String replaceExpression;

    /**
     * {@inheritDoc}
     */
    @Override
    public int execute(final BuilderContext context, final Paragraph paragraph)
    {
        String content = paragraph.getContent();
        paragraph.setContent(regEx.matcher(content).replaceAll(replaceExpression));
    }

这是将在模式上匹配的字符串的样子:

"Be it enacted by the Senate and House of Representatives of the United States of America in Congress assembled,,&lt;m&gt;Surface Transportation Extension Act of 2012.,&lt;xm&gt;"

它似乎并没有真正取代这里的标记,有什么问题?

我希望输出字符串看起来像:

"Be it enacted by the Senate and House of Representatives of the United States of America in Congress assembled,,&lt;marginal.markup&gt;Surface Transportation Extension Act of 2012.,&lt;/marginal.markup&gt;"
4

2 回答 2

3

由于您在 Spring XML 文件中使用了转义实体,因此传递给 compile() 方法的实际模式不是

(.*)(&lt;m&gt;)(.*)(&lt;xm&gt;)(.*)

(.*)(<m>)(.*)(<xm>)(.*)

如果要传递第一个模式,则必须转义 & 符号:

(.*)(&amp;lt;m&amp;gt;)(.*)(&amp;lt;xm&amp;gt;)(.*)
于 2013-06-03T19:14:12.957 回答
1

尝试通过属性文件解析 Reg Ex,然后创建模式对象。我解决了通过 XML bean 注入 Reg Ex 时遇到的相同问题。

Ex :- 我需要(.*)(D[0-9]{7}\.D[0-9]{9}\.D[A-Z]{3}[0-9]{4})(.*)通过在 Spring 中注入来解析 Reg Ex。但它没有用。然后我尝试在 Java 类中使用相同的 Reg Ex 硬编码并且它起作用了。

Pattern pattern = Pattern.compile("(.*)(D[0-9]{7}\\.D[0-9]{9}\\.D[A-Z]{2}[0-9]{4})(.*)");
Matcher matcher = pattern.matcher(file.getName().trim());

接下来,我尝试在注入时通过属性文件加载该 Reg Ex。它工作得很好。

p:remoteDirectory="${rawDailyReport.remote.download.dir}"
p:localDirectory="${rawDailyReport.local.valid.dir}"
p:redEx="${rawDailyReport.download.regex}"

在属性文件中,属性定义如下。

(.*)(D[0-9]{7}\\.D[0-9]{9}\\.D[A-Z]{2}[0-9]{4})(.*)

这是因为带有占位符的值是通过加载的,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer并且它在内部处理这些 XML 敏感字符。

于 2017-06-06T07:17:34.120 回答