2010-05-27 3 views
0
String s= "(See <a href=\"/wiki/Grass_fed_beef\" title=\"Grass fed beef\" " + 
      "class=\"mw-redirect\">grass fed beef.) They have been used for " + 
      "<a href=\"/wiki/Paper\" title=\"Paper\">paper-making since " + 
      "2400 BC or before."; 

В строке выше у меня есть смешанный HTML-текст с текстом.Регулярные выражения в java

Ну требование о том, что выход выглядит следующим образом: -

Они были использованы для изготовления бумаги, так как 2400 г. до н.э. или ранее.

Может ли кто-нибудь помочь мне с общим регулярным выражением, которое даст желаемый результат от данного ввода?

Заранее благодарен!

+3

(убегает от крика) – ZoogieZork

ответ

1

следующее выражение:

\([^)]*?\)|<[a-zA-Z/][^>]*?> 

будет соответствовать все, что выглядит как HTML теги и любой текст в скобках. Замените упомянутый текст на «», и вы идете.

Примечание: Если вы пытаетесь соответствовать любой строке, которая имеет теги сценария в нем, или «HTML», где автор не потрудился избежать < и >, когда они не были использованы в качестве меток разделителей), или a (без), все, вероятно, не будет работать так, как вы надеялись.

+0

Большое спасибо за вашу помощь. Прошу прощения за любые неудобства с тем, как я сформулировал свой вопрос. Но я благодарю вас за понимание. Я буду уверен, что в следующий раз я сформулирую свои цели лучше. Если это не слишком беспокоит, я не могу понять, как это обычное выражение делает трюк. Разве можно было бы сломать его? Если нет, это тоже нормально, я попытаюсь понять это. В очередной раз благодарим за помощь. –

+1

Это на самом деле две части. Первый - это \ ([^)] *? \), Который будет соответствовать (, любому числу символов, которые не являются) (как можно меньше, хотя, следовательно,?), А затем a). Вторая часть - <[a-zA-Z/][^>] *?>, Которая будет соответствовать открытию <, букве (чтобы избежать сопоставления ошибочно невыбранных <), и все до следующего> так же работает(). | между ними означает «или», поэтому, если каждая из частей соответствует, выражение совпадает. – cHao

+1

На самом деле это может быть принято, теперь я думаю об этом. Это никогда не будет соответствовать предыдущему разделителю, поскольку мы указываем, что разделитель никогда не может быть частью внутренней строки. – cHao

1

https://stackoverflow.com/questions/1732348#1732454

Вы были предупреждены.

+0

Прошу прощения, но я новичок в этом. Не могли бы вы рассказать мне, что это за предупреждение? Возможно, я не понял. –

+2

В менее тонком ужасно-блокбастере: он предупреждает вас, что регулярные выражения ** не должны использоваться ** для анализа (X) HTML. – nc3b

+0

@rookie В основном, дело в том, что регулярные выражения не подходят для разбора html. Если у вас нет особого случая. Вместо этого вы должны использовать инструмент анализатора HTML. – jjnguy

Смежные вопросы